[ML] Numpy Stack Summary
Numpy Stack
import numpy as np
차원 추가 X
np.vstack()
np.hstack()
np.concatenate()
<-- General
새로운 차원 추가
np.stack()
Special Case
np.dstack()
np.vstack
np.concatenate(arr_list, axis=0)
과 동일
a = np.random.randint(0, 10, size=(2, 3))
b = np.random.randint(0, 10, size=(4, 3))
print(np.vstack([a, b]).shape)
>>> (6, 3)
print(np.concatenate([a, b], axis=0).shape)
>>> (6, 3)
np.hstack
np.concatenate(arr_list, axis=1)
과 동일
a = np.random.randint(0, 10, size=(2, 5))
b = np.random.randint(0, 10, size=(2, 3))
print(np.hstack([a, b]).shape)
>>> (2, 8)
print(np.concatenate([a, b], axis=1).shape)
>>> (2, 8)
np.concatenate
a = np.random.randint(0, 10, (5, 6, 7, 8, 9))
b = np.random.randint(0, 10, (5, 6, 7, 8, 9))
print(np.concatenate([a, b], axis=3).shape)
>>> (5, 6, 7, 16, 9)
np.stack
지정한 axis 에 새로운 차원을 만들면서 쌓는다. (Default axis=0)
a = np.random.randint(0, 10, (3, 5, 7, 12))
b = np.random.randint(0, 10, (3, 5, 7, 12))
print(np.stack([a, b]).shape)
>>> (2, 3, 5, 7, 12)
print(np.stack([a, b], axis=1).shape)
>>> (3, 2, 5, 7, 12)
print(np.stack([a, b], axis=-1).shape)
>>> (3, 5, 7, 12, 2)
np.dstack
ndim == 2
: 가장 마지막 axis 에 새로운 차원을 만들면서 쌓는다.np.stack(arr_list, axis=-1)
과 동일ndim > 2
: axis=2 기준으로 쌓는다.np.concatenate(arr_list, axis=2)
과 동일
ndim == 2
a = np.random.randint(0, 10, size=(2, 3))
b = np.random.randint(0, 10, size=(2, 3))
print(np.dstack([a, b]).shape)
>>> (2, 3, 2)
ndim == 3
a = np.random.randint(0, 10, size=(2, 3, 4))
b = np.random.randint(0, 10, size=(2, 3, 4))
print(np.dstack([a, b]).shape)
>>> (2, 3, 8)
ndim == 4
a = np.random.randint(0, 10, size=(2, 3, 4, 5))
b = np.random.randint(0, 10, size=(2, 3, 4, 5))
print(np.dstack([a, b]).shape)
>>> (2, 3, 8, 5)
Conclusion
- 새로운 차원을 생성하지 않고 array 를 쌓고 싶은 경우
ndim == 2
일 때, 즉 2차원 Matrix 를 다룰 때는np.vstack()
,np.hstack()
사용 권장ndim > 2
인 경우,np.concatenate()
사용 권장
- 새로운 차원을 생성하며 array 를 쌓고 싶은 경우:
np.stack()
Leave a comment