numpy - 값 채우기, 슬라이스

KDG·2021년 2월 6일
0

값 채우기

1. 기존의 배열에 값 채우기

0 부터 5까지 2차원의 배열 생성

a_int = np.arange(6).reshape(2,3)
 -> array([[0, 1, 2],
           [3, 4, 5]])
  • 0으로 채움 - np.zeros_like(기존 배열, 타입)
# a_int 2,3 배열의 값을 0으로 채움(변경)
* np.zeros_like(a_int)
   -> array([[0, 0, 0],
             [0, 0, 0]])
           
* np.zeros_like(a_int, dtype=float)  # 타입 지정
   -> array([[0., 0., 0.],
             [0., 0., 0.]])   # int -> float
  • 1로 채움 - np.ones_like(기존 배열, 타입)
# a_int 2,3 배열의 값을 1로 채움(변경)
* np.ones_like(a_int)
   -> array([[1, 1, 1],
             [1, 1, 1]])
           
* np.ones_like(a_int, dtype=float)  # 타입 지정
   -> array([[1., 1., 1.],
             [1., 1., 1.]])   # int -> float
  • 임의의 값으로 채움 - np.full_like(기존 배열, 채울값, 타입)
# a_int 2,3 배열의 값을 임의의 값으로로 채움(변경)
* np.full_like(a_int, 100)
   -> array([[100, 100, 100],
             [100, 100, 100]])
           
* np.full_like(a_int, 100, dtype=float)  # 타입 지정
   -> array([[100., 100., 100.],
             [100., 100., 100.]])   # int -> float

2. 요소 수를 지정해서 채우기

  • linespace(시작값, 끝나는값, 분할개수, 타입, endpoint, retstep)
    • endpoint : 기본값 True. False로 지정하면 '끝나는값'을 포함하지 않고 분할)
    • retstep : 기본값 False. True로 지정하면 스텝의 값을 알려줌
 * np.linspace(0,10,3)   # 0 부터 10까지 자동 3등분
    -> array([ 0.,  5., 10.])
    
 * np.linspace(1,10,5)   # 1 부터 10까지 자동 5등분
    -> array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ])
    
 * print(np.linspace(10,0,5, endpoint=False, dtype=int, retstep=True)
 # 10 에서 0까지 자동 5등분. 역순으로 등분
    -> (array([10,  8,  6,  4,  2]), -2.0)  # 0을 표시하지 않고, 스텝의 값을 표시

3. 난수로 배열값 채우기

  • np.random.rand() - 0.0 이상 ~ 1.0 미만의 난수 생성
    • 인수 하나하나가 출력 배열의 각 차원 길이
 * np.random.rand(3)   # 1차원 난수 생성
    -> array([0.04590345, 0.42441386, 0.25703375])
    
 * np.random.rand(2,3)   
 # 2,3 인수로 (2,3)의 2차원 난수 생성 
    -> array([[0.00710006, 0.0406408 , 0.87491746],
              [0.57945718, 0.52464235, 0.20441487]])
    
 * np.random.rand(2,2,3)
 # 2,2,3 인수로 (2,2,3)의 3차원 난수 생성
    -> array([[[0.9732047 , 0.72206937, 0.57992388],
               [0.73991806, 0.08550887, 0.85841823]],

              [[0.14292297, 0.64883607, 0.36973833],
               [0.26686449, 0.16283865, 0.44511027]]])
  • np.random.random_sample() - 0.0 이상 ~ 1.0 미만의 난수 생성
    • 인수는 단일 튜플
 * np.random.random_sample(3)   # 1차원 난수 생성
    -> array([0.04590345, 0.42441386, 0.25703375])
    
 * np.random.random_sample((2,3))   
 # (2,3) 튜플 인수로 (2,3)의 2차원 난수 생성 
    -> array([[0.00710006, 0.0406408 , 0.87491746],
              [0.57945718, 0.52464235, 0.20441487]])
    
 * np.random.random_sample((2,2,3))
 # (2,2,3) 튜플 인수로 (2,2,3)의 3차원 난수 생성
    -> array([[[0.9732047 , 0.72206937, 0.57992388],
               [0.73991806, 0.08550887, 0.85841823]],

              [[0.14292297, 0.64883607, 0.36973833],
               [0.26686449, 0.16283865, 0.44511027]]])
  • numpy.random.randint(최소값, 최대값, shape, 타입) : 정수 난수 생성
 * np.random.randint(4, 10, (3,3))   
 # 4이상 10미만 사이의 정수인 난수값이 (3,3)형태로 생성
    -> array([[7, 4, 8],
              [8, 6, 8],
              [5, 9, 6]])

슬라이스

슬라이스( [ : ] )를 이용해서 특정 범위의 값을 출력하거나 변경 할 수 있음

# 행열 전체
* a_int[:]
   -> array([[0, 1, 2],
             [3, 4, 5]])
             
# 행과 열을 전체 지정
* a_int[:, :]  # 첫 번째가 행, 두 번째가 열
   -> array([[0, 1, 2],
             [3, 4, 5]])
             
# 행 선택 지정
* a_int[:1, :]
   -> array([[0, 1, 2]])
   
# 열 선택 지정
* a_int[:, :2]
   -> array([[0, 1],
             [3, 4]]) 
             
# 행과 열을 선택 지정
* a_int[:1, :2]
   -> array([[0, 1]])
   
# 선택한 범위의 값 변경
* a_int[:1, :2] = 100   # 1행 2열까지의 값을 100으로 변경
   -> array([[100, 100,   2],
             [  3,   4,   5]])

0개의 댓글