Studio KimHippo :D

[Python / NumPy] 3. NumPy 배열 인덱싱, 슬라이싱 본문

Python Study/NumPy

[Python / NumPy] 3. NumPy 배열 인덱싱, 슬라이싱

김작은하마 2019. 7. 7. 23:36
 import numpy as np

x = np.arange(10)

np.random.seed(0)
x1 = np.random.randint(10, size = 6)
x2 = np.random.randint(10, size = (3, 4))
x3 = np.random.randint(10, size = (3, 4, 5))
 # NOTE : 배열변수[start, stop, step]
print(x[:5],'\n', x[5:],'\n', x[4:7],'\n', x[::2],'\n', x[1::2],'\n')
print(x[5::-2]) 

Out [1] : [0 1 2 3 4]

Out [2] : [5 6 7 8 9]

Out [3] : [4 5 6]

Out [4] : [0 2 4 6 8]

Out [5] : [1 3 5 7 9]

Out [6] : [5 3 1]

# NOTE : 역순정렬
print(x[::-1], '\n')

# NOTE : 2개의 행, 3개의 열
x2[:2, :3]

# NOTE : 모든 행, 한 열 걸러 하나씩
x2[:3, ::2]

# NOTE : 역순정렬
x2[::-1, ::-1]

# NOTE : x2의 첫 번째 열
x2[:, 0]

# NOTE : x2의 첫 번째 행
x2[0, :]


# NOTE : x2[0, :]과 동일
print(x2[0])

Out [1] :  [9 8 7 6 5 4 3 2 1 0] 

Out [2] :  array([[12, 5, 2], [ 7, 6, 8]])

Out [3] :  array([[12, 2], [ 7, 8], [ 1, 7]])

Out [4] :  array([[ 7, 7, 6, 1], [ 8, 8, 6, 7], [ 4, 2, 5, 12]])

Out [5] :  array([12, 5, 2, 4])

Out [6] :  [12 5 2 4]

# NOTE : numpy에서의 배열 슬라이스는 사본(copy)이 아니라 뷰(view)이다.
x2_sub = x2[:2, :2]
print(x2_sub) 

x2_sub[0, 0] = 99
print(x2_sub)
print(x2)

Out [1] :  [[12 5] [ 7 6]]

Out [2] :  [[99 5] [ 7 6]]

Out [3] :  [[99 5 2 4] [ 7 6 8 8] [ 1 6 7 7]]

# NOTE : 배열의 사본 만들기
x2_sub_copy = x2[:2, :2].copy()
print(x2_sub_copy) 

x2_sub_copy[0, 0] = 42
print(x2_sub_copy)
print(x2)

Out [1] :  [[99 5] [ 7 6]]

Out [2] :  [[42 5] [ 7 6]]

Out [3] :  [[99 5 2 4] [ 7 6 8 8] [ 1 6 7 7]]

 

참고

O'REILLY 제이크 밴더플래스 저/ 위키북스 김정인 역 - 파이썬 데이터 사이언스 핸드북

Comments