numpy는 다차원 배열(즉, tensor)을 효율적으로 다루기 위한 python 패키지이다. python에 있는 list 자료형과 비슷하다고 생각할 수 있지만, numpy는 숫자 데이터로 이뤄진 배열에 특화되어있고, 그 값이 커질 수록 list보다 효율적으로(계산 시간 小) 데이터를 다룰 수 있어서 Data Science 분야에서 기본적으로 배운다.
7. shape manipulation
reshape((x, y, z)), reshape(x, y, z): (x, y, z) shape이 되도록 변경, 이 때 기존 array의 전체 요소 개수와 x*y*z의 값이 같아야 한다.(같지 않으면 오류 메시지 출력)
reshape((x, -1)), reshape(x, -1): -1에 해당하는 부분에서는 자동으로 차원을 채워서 array shape 변경
a[ : , None]: 한 차원을 추가, 기존의 shape이 (x, y, z)라면 (x, 1, y, z)로 변경
ex>
a = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
print(a.reshape((2, 6)))
>> [[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
print(a.reshape((6, -1)))
>> [[ 1 2]
[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]]
print(a[ : , None].shape)
>> (4, 1, 3)
np.vstack([a, b]): a와 b 행렬을 행 방향으로 쌓음
np.hstack([a, b]): a와 b 행렬을 열 방향으로 쌓음
np.concatenate([a, b], axis=i): a와 b의 tensor를 i 축에 해당하는 방향으로 쌓음 -> i에 해당하는 축을 제외하고 나머지 a와 b의 shape은 동일해야한다.
ex1>
a = np.array([[1, 2], [2, 3]])
b = np.array([[0, 0], [1, 1]])
print(np.vstack([a, b]))
>> [[1 2]
[2 3]
[0 0]
[1 1]]
print(np.hstack([a, b]))
>> [[1 2 0 0]
[2 3 1 1]]
ex2>
a = np.random.random((2, 3, 3)) b = np.random.random((2, 2, 3)) c = np.concatenate([a, b], axis=1) print(c.shape)
>> (2, 5, 3)
-> axis는 해당 배열을 shape했을 때 나오는 부분을 기준으로 결정: 위 예시의 경우 axis=1이므로 index 1에 해당하는 부분으로 concatenate 연산
a.T: a가 행렬일 때 transpose 연산
np.transpose(a, [i, j, k]): 축이 i, j, k가 되도록 변경(swap이라고 함)
ex1>
a = np.array([[1,2], [3,4], [5,6]])
print(a)
>> [[1 2]
[3 4]
[5 6]]
print(a.T)
>> [[1 3 5]
[2 4 6]]
ex2>
a = np.random.random((2, 3, 4)) b = np.transpose(a, [0, 2, 1]) print(b.shape)
>> (2, 4, 3)
c = np.transpose(a, [1, 0, 2])
print(c.shape)
>> (3, 2, 4)
-> 처음 shape이 (2, 3, 4)이고, transpose에서 [0, 2, 1]이므로 axis = 1에 해당하는 부분과 axis = 2에 해당하는 부분에서 swap이 일어난다. 그래서 결과인 b의 shape이 (2, 3, 4)에서 (2, 4, 3)이 된다.
'Python' 카테고리의 다른 글
Pytorch의 tensor GPU 연산하기(Autograd 이해하기) (0) | 2020.11.07 |
---|---|
Pytorch의 tensor 다루기 (0) | 2020.11.07 |
numpy 다루기 2 (0) | 2020.10.23 |
numpy 다루기 1 (0) | 2020.10.23 |
Python str 자료형(문자열) 멤버 함수 정리 (0) | 2020.10.22 |