[Python Note] 넘파이(NumPy) 이해하기 (2)
1. 배열 생성
1) 0 배열 / 1 배열 / 랜덤 배열
( )
안에 shape 즉 배열의 크기를 입력하면 된다.
예를 들어, $2\times 3$ 배열을 만들고 싶다면(2, 3)
으로 입력한다.np.zeros_like(a)
,np.ones_like(a)
를 사용하면 배열a
의 크기와 같은 배열이 만들어진다.
설명 | command |
---|---|
0 배열 | np.zeros() |
1 배열 | np.ones() |
랜덤 배열 | np.empty() |
arr1 = np.zeros(5)
arr2 = np.ones((2, 3))
arr3 = np.empty((2, 2, 3))
2) 수열
- 간격을 설정해서 수열 만들기
np.arange(시작, 끝, 간격)
- 개수를 설정해서 수열 만들기:
np.linspace(시작, 끝, 갯수, endpoint=True or False)
np.logspace(시작, 끝, 갯수, endpoint=True or False)
※ 데이터 분석을 할 때 수가 너무 크면 로그 변환을 하기도 한다..
arr1 = np.arange(0, 10, 0.25)
arr2 = np.linspace(0, 10, 10)
arr3 = np.linspace(0, 10, 10, endpoint=False)
arr4 = np.logspace(0, 10, 10)
2. 배열 변형
1) 배열 변형
전치 행렬
- 차원의 행과 열을 바꾼다.
arr.T
배열 변형
arr.reshape(바꿀 차원)
- 행과 열 중 하나만 고정하고 싶을 때에는 -1을 사용한다.
배열 펼치기: ‘C’는 1행 2행으로 읽고, ‘F’는 1열 2열로 읽는다.
arr.ravel(order='C' or 'F')
arr.flatten(order='C' or 'F')
arr1 = np.arange(12)
arr2 = arr1.reshape(2, 6)
arr3 = arr1.reshape(-1, 4) # 4개의 열로 바꾼다.
arr4 = arr3.T
arr4.ravel(order = 'C') # default
arr4.ravel(order = 'F')
arr4.flatten(order = 'C') # default
arr4.flatten(order = 'F')
주의
원소의 개수가 $n$개인 1차원 배열과 $n\times 1$을 의미하는 1열을 가지는 2차원 배열은
다르다.
arr1
arr1.reshape(12,1)
2) 배열 연결
배열 합치기
- 합칠 배열을 리스트 형식으로 입력한다.
- 예를 들어 배열1, 배열2의 shape가 (3, 4)라고 하자.
axis=0으로 합치면 행이 하나 추가되어 (2, 3, 4)이 되고,
axis=1으로 합치면 열이 하나 추가되어 (3, 2, 4)로 되고,
axis=2으로 합치면 깊이가 하나 추가되어 (3, 4, 2)가 되는 것이다.
np.stack([arr1, arr2, ...], axis=0 or 1 or 2)
arr1 = np.ones((3, 4))
arr2 = np.zeros((3, 4))
arr3 = np.stack([arr1, arr2], axis=0)
arr3, arr3.shape
arr3 = np.stack([arr1, arr2], axis=1)
arr3, arr3.shape
arr3 = np.stack([arr1, arr2], axis=2)
arr3, arr3.shape
배열 원소 합치기
- 합칠 배열을 리스트 형식으로 입력한다.
- 예를 들어 배열1, 배열2의 shape가 (3, 4)라고 하자.
hstack
이나c_
이면 열이 추가되어 (3, 8)이 되고,
vstack
이나r_
이면 행이 추가되어 (6, 4)가 되고,
dstack
이면 깊이가 추가되어 (3, 4, 2)가 된다.
np.hstack([...])
또는 np.c_[...]
np.vstack([...])
또는 np.r_[...]
np.dstack([...])
arr3 = np.hstack([arr1, arr2])
arr3, arr3.shape
arr3 = np.vstack([arr1, arr2])
arr3, arr3.shape
arr3 = np.dstack([arr1, arr2])
arr3, arr3.shape
배열 복사
np.tile(arr, 차원의 크기)
- 예를 들어 배열1의 차원이 (3, 2)이고,
이 배열을 차원 (2, 2)로 복사하고 싶다고 하자.
그러면 차원의 크기가 (3*2, 2*2)=(6, 4)인 행렬이 된다.
arr1 = np.arange(6).reshape(3, 2)
arr2 = np.tile(arr1, (2, 2))
arr2, arr2.shape
(array([[0, 1, 0, 1],
[2, 3, 2, 3],
[4, 5, 4, 5],
[0, 1, 0, 1],
[2, 3, 2, 3],
[4, 5, 4, 5]]),
(6, 4))
댓글남기기