Programming
Python Library_Numpy2[축 전환, 배열연결]
HongDaang
2023. 3. 22. 10:34
ABC부트캠프_2023.03.22
- 팬시인덱스 : 정수배열인덱스 인덱스 배열의 원소 각각이 원래 ndarray 객체 원소 하나를 가리키는 인덱스 정수여야함. |
import numpy as np
a = np.array([11,12,13,14,15,16,17,18,19])
idx = np.array([0,2,4,6,8])
a[idx]
array([11, 13, 15, 17, 19])
idx = np.array([0,1,0,0,2,2,8])
a[idx]
array([11, 12, 11, 11, 13, 13, 19])
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
<위의 배열 슬라이싱 하기>
더보기
a[: , [True, False, False, True]] # 전체 행, True에 해당하는 열
array([[ 1, 4],
[ 5, 8],
[ 9, 12]])
a[[2,0,1], : ] # 2,0,1 -> 순서에 맞게 3행-1행-2행 순서로
array([[ 9, 10, 11, 12],
[ 1, 2, 3, 4],
[ 5, 6, 7, 8]])
축 전환 |
-2차원
arr = np.arange(15).reshape(3,5)
arr
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
1) arr.T 사용
transposing 2D array : T attribute
arr.T #축 전환
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
2) arr.transpose() 사용
transpose method : numpy.transpose(a, axes=None)
arr.transpose() # 축 전환
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
더보기
arr.transpose(0,1) #다시 원래대로
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
arr.transpose(1,0) # 행과 열을 바꾸겠다는 뜻
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
- 3차원
arr = np.arange(16).reshape((2,2,4))
arr
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
-arr.transpose()사용
arr.transpose((1,0,2)) # 축번호를 받아 치환
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
arr.transpose((2,0,1))
array([[[ 0, 4],
[ 8, 12]],
[[ 1, 5],
[ 9, 13]],
[[ 2, 6],
[10, 14]],
[[ 3, 7],
[11, 15]]])
- arr.swapaxes()사용
swapaxes method : numpy.swapaxes(a, axis1, axis2)
arr.swapaxes(1,2) #축 번호로 배열을 뒤바꿈/ swapaxes(2,1) = transpose(0,2,1)
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
배열 연결 - hstack - vstack - dstack -stack - tile |
1) hstack
#hstack : 행의 수가 같은 두개 이상의 배열을 옆으로 연결
a1 = np.ones((2,3))
a1
array([[1., 1., 1.],
[1., 1., 1.]])
b1 = np.zeros((2,2))
b1
array([[0., 0.],
[0., 0.]])
np.hstack([a1,b1])
array([[1., 1., 1., 0., 0.],
[1., 1., 1., 0., 0.]])
2) vstack
#vstack : 열의 수가 같은 두개 이상의 배열을 위 아래로 연결
# 열의 수가 같아야 붙일 수 있음
a2 = np.ones((2,3))
a2
array([[1., 1., 1.],
[1., 1., 1.]])
b2 = np.zeros((3,3))
b2
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
np.vstack([a2,b2])
array([[1., 1., 1.],
[1., 1., 1.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
3) dstack
#dstack : 깊이방향으로 배열을 합침
# (2 * 3) --> (2 * 3 * 2)
c1 = np.ones((2,3))
c1
array([[1., 1., 1.],
[1., 1., 1.]])
c2 = np.zeros((2,3))
c2
array([[0., 0., 0.],
[0., 0., 0.]])
np.dstack([c1,c2])
array([[[1., 0.],
[1., 0.],
[1., 0.]],
[[1., 0.],
[1., 0.],
[1., 0.]]])
4) stack
#stack : 사용자가 지정한 축으로 연결
c= np.stack([c1,c2])
c
array([[[1., 1., 1.],
[1., 1., 1.]],
[[0., 0., 0.],
[0., 0., 0.]]])
c.shape
(2, 2, 3)
c = np.stack([c1, c2], axis=1)
c
array([[[1., 1., 1.],
[0., 0., 0.]],
[[1., 1., 1.],
[0., 0., 0.]]])
c.shape
(2, 2, 3)
5) tile
#tile : 동일한 배열을 반복 연결
a= np.array([[0,1,2],[3,4,5]])
np.tile(a,2) # 2번 반복
array([[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5]])
np.tile(a, (3, 2)) # 밑으로 3개 옆으로 2개
array([[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5],
[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5],
[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5]])