코드
x = np.array([[1, 2, 3],
[4, 5, 6]])
# 아래 3가지 모두 같은 결과 반환
print("np.transpose \n", np.transpose(x))
print("\nx.transpose \n", x.transpose())
print("\nx.T \n", x.T)
결과
np.transpose
[[1 4]
[2 5]
[3 6]]
x.transpose
[[1 4]
[2 5]
[3 6]]
x.T
[[1 4]
[2 5]
[3 6]]
3차원 배열 기준 transpose(배열, (0, 1, 2))
여기서
0은 차원 사이의 인덱스 위치
1은 차원 안에서 세로축
2는 차원 안에서 가로축
예)
[[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[ -1, -2, -3],
[ -4, -5, -6],
[ -7, -8, -9]]]
라면,
5와 -5는 axis 0
1, 4, 7은 axis 1
-1, -2, -3은 axis 2
2와 -2는 axis 0
-3, -6, -9는 axis 1
4, 5, 6은 axis 2
transpose함수의 축 파라미터 위치는 0, 1, 2의 순서이다. 즉, transpose함수의 파라미터를 0, 2, 1로 설정한다면, 1번 자리에 axis 2가 왔고, 2번 자리에 axis 1이 왔으므로 axis 2와 axis 1의 위치가 바뀌게 된다.
만약 3차원 이상의 배열에 대하여 transpose의 축 순서 튜플을 지정하지 않는다면 default로 전체 axis방향이 reverse된 결과가 축 순서 튜플로 간주되어 축 교환이 수행된다.
코드
print("a2배열 \n", a2)
print("\na2.T \n", a2.T)
print("\na2.swapaxes(1, 0) \n", a2.swapaxes(1, 0))
print("-"*60)
print("a3배열 \n", a3)
print("\na3.T \n", a3.T)
print("\na3.swapaxes(2, 0) \n", a3.swapaxes(2,0))
print("\na3.swapaxes(2, 1) \n", a3.swapaxes(2,1))
a2배열
[[1 2 3]
[4 5 6]
[7 8 9]]
a2.T
[[1 4 7]
[2 5 8]
[3 6 9]]
a2.swapaxes(1, 0)
[[1 4 7]
[2 5 8]
[3 6 9]]
------------------------------------------------------------
a3배열
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]]
[[10 11 12]
[13 14 15]
[16 17 18]]
[[19 20 21]
[22 23 24]
[25 26 27]]]
a3.T
[[[ 1 10 19]
[ 4 13 22]
[ 7 16 25]]
[[ 2 11 20]
[ 5 14 23]
[ 8 17 26]]
[[ 3 12 21]
[ 6 15 24]
[ 9 18 27]]]
a3.swapaxes(2, 0)
[[[ 1 10 19]
[ 4 13 22]
[ 7 16 25]]
[[ 2 11 20]
[ 5 14 23]
[ 8 17 26]]
[[ 3 12 21]
[ 6 15 24]
[ 9 18 27]]]
a3.swapaxes(2, 1)
[[[ 1 4 7]
[ 2 5 8]
[ 3 6 9]]
[[10 13 16]
[11 14 17]
[12 15 18]]
[[19 22 25]
[20 23 26]
[21 24 27]]]
코드
n1 = np.arange(1, 10)
print("n1\n", n1)
print("\nn1.reshape(3,3)\n", n1.reshape(3,3)) # reshape(): 배열의 형상을 변경
print("\n\nn1[np.newaxis, :5]\n", n1[np.newaxis, :5]) # newaxis(): 새로운 축 추가
print("\nn1[:5, np.newaxis]\n", n1[:5, np.newaxis])
결
n1
[1 2 3 4 5 6 7 8 9]
n1.reshape(3,3)
[[1 2 3]
[4 5 6]
[7 8 9]]
n1[np.newaxis, :5]
[[1 2 3 4 5]]
n1[:5, np.newaxis]
[[1]
[2]
[3]
[4]
[5]]
코드
n2 = np.random.randint(0, 10, (2, 5))
print("기존 배열\n", n2)
n2.resize((5, 2))
print("\nn2.resize((5, 2))\n", n2)
n2.resize((5, 5))
print("\nn2.resize((5, 5))\n", n2)
n2.resize((3, 3))
print("\nn2.resize((3, 3))\n", n2)
결과
기존 배열
[[1 0 0 4 8]
[2 4 5 4 6]]
n2.resize((5, 2))
[[1 0]
[0 4]
[8 2]
[4 5]
[4 6]]
n2.resize((5, 5))
[[1 0 0 4 8]
[2 4 5 4 6]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
n2.resize((3, 3))
[[1 0 0]
[4 8 2]
[4 5 4]]
코드
a2 = np.arange(1, 10).reshape(3, 3)
b2 = np.arange(10, 19).reshape(3, 3)
print("a2배열\n", a2)
print("\nb2배열\n", b2)
c2 = np.append(a2, b2)
print("\nmaxis지정하지 않고 append\n", c2)
c2 = np.append(a2, b2, axis = 0)
print("\naxis = 0 append\n", c2)
c2 = np.append(a2, b2, axis = 1)
print("\naxis = 1 append\n", c2)
결과
a2배열
[[1 2 3]
[4 5 6]
[7 8 9]]
b2배열
[[10 11 12]
[13 14 15]
[16 17 18]]
maxis지정하지 않고 append
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]
axis = 0 append
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]
[16 17 18]]
axis = 1 append
[[ 1 2 3 10 11 12]
[ 4 5 6 13 14 15]
[ 7 8 9 16 17 18]]
코드
a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
print("a1과 b1연결(concatenate)\n", np.concatenate([a1, b1]))
c1 = np.array([7, 8, 9])
print("\na1, b1, c1 연결(concatenate)\n", np.concatenate([a1, b1, c1]))
a2 = np.array([[1, 2, 3],
[4, 5, 6]])
print("\na2, a2연결(concatenate) axis = 0 (default)\n", np.concatenate([a2, a2]))
print("\na2, a2연결(concatenate) axis = 1\n", np.concatenate([a2, a2], axis=1))
결과
a1과 b1연결(concatenate)
[1 3 5 2 4 6]
a1, b1, c1 연결(concatenate)
[1 3 5 2 4 6 7 8 9]
a2, a2연결(concatenate) axis = 0 (default)
[[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]]
a2, a2연결(concatenate) axis = 1
[[1 2 3 1 2 3]
[4 5 6 4 5 6]]
코드
a2 = np.array([[1,2,3],
[4,5,6]])
print("a2\n", a2)
print("\nvstack\n", np.vstack([a2, a2]))
print("\nhstack\n", np.hstack([a2, a2]))
print("\ndstack\n", np.dstack([a2, a2]))
print("\nstack\n", np.stack([a2, a2]))
결과
a2
[[1 2 3]
[4 5 6]]
vstack
[[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]]
hstack
[[1 2 3 1 2 3]
[4 5 6 4 5 6]]
dstack
[[[1 1]
[2 2]
[3 3]]
[[4 4]
[5 5]
[6 6]]]
stack
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
코드
a2 = np.arange(1, 10).reshape(3, 3)
print("a2배열\n", a2)
print("-"*60)
b2, c2 = np.vsplit(a2, [2])
print("\nvsplit b2배열\n", b2)
print("\nvsplit c2배열\n", c2)
print("-"*60)
b2, c2 = np.hsplit(a2, [2])
print("\nhsplit b2배열\n", b2)
print("\nhsplit c2배열\n", c2)
print("-"*60)
a3 = np.arange(1, 28).reshape(3, 3, 3)
print("\na3배열\n", a3)
b3, c3 = np.dsplit(a3, [2])
print("\ndsplit b3배열\n", b3)
print("\ndsplit c3배열\n", c3)
결과
a2배열
[[1 2 3]
[4 5 6]
[7 8 9]]
------------------------------------------------------------
vsplit b2배열
[[1 2 3]
[4 5 6]]
vsplit c2배열
[[7 8 9]]
------------------------------------------------------------
hsplit b2배열
[[1 2]
[4 5]
[7 8]]
hsplit c2배열
[[3]
[6]
[9]]
------------------------------------------------------------
a3배열
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]]
[[10 11 12]
[13 14 15]
[16 17 18]]
[[19 20 21]
[22 23 24]
[25 26 27]]]
dsplit b3배열
[[[ 1 2]
[ 4 5]
[ 7 8]]
[[10 11]
[13 14]
[16 17]]
[[19 20]
[22 23]
[25 26]]]
dsplit c3배열
[[[ 3]
[ 6]
[ 9]]
[[12]
[15]
[18]]
[[21]
[24]
[27]]]
출처: 이수안 컴퓨터 연구소, [Numpy] 배열 축 교환 함수 : np.transpose, np.swapaxes 사용법 정리 (tistory.com)
NUMPY 기초 문법 정리6_배열 입출력 (0) | 2024.01.21 |
---|---|
NUMPY 기초 문법 정리5_배열 연산 (0) | 2024.01.19 |
NUMPY 기초 문법 정리3_배열 값 삽입/수정/삭제/복사 (0) | 2024.01.19 |
NUMPY 기초 문법 정리2_배열 조회 (0) | 2024.01.19 |
NUMPY 기초 문법 정리1_배열을 생성하는 법 (0) | 2024.01.19 |