Python

numpy 다루기 3

qlsenddl 2020. 10. 30. 17:36
728x90

 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)이 된다.

728x90

'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