728x90
인덱싱
# a 배열 생성 & 출력
a = np.arange(10)**2
print(a)
>>> [ 0 1 4 9 16 25 36 49 64 81]
# a 배열의 2번째 인덱스 출력
print(a[2])
>>> 4
# a 배열의 2~4번 인덱스 출력
print(a[2:5])
>>> [ 4 9 16]
# reverse : 배열의 요소 거꾸로 출력
print(a[: : -1])
>>> [81 64 49 36 25 16 9 4 1 0]
# 0~5번에서 2Step 인덱스 출력
# a[0:6:2] = a[:6:2]
# 인덱스 0, 2, 4 해당하는 값에 1000 삽입
a[0:6:2] = 1000
print(a)
>>> [1000 1 1000 9 1000 25 36 49 64 81]
인덱스 배열로 인덱싱
# a 배열 생성 & 출력
a = np.arange(8)**2
print(a)
>>> [ 0 1 4 9 16 25 36 49]
# i 1차원 배열 생성 & 출력
# a 배열의 index로 i를 삽입하여 출력
i = np.array([1, 1, 3, 5])
print(a[i])
>>> [ 1 1 9 25]
# j 2차원 배열 생성
# a 배열의 index로 j를 삽입하여 출력
j = np.array([[3,4], [2,5]])
print(a[j])
>>> [[ 9 16]
[ 4 25]]
boolean 인덱싱
# a 배열 생성 & 출력
a = np.arange(12).reshape(3,4)
print(a)
>>> [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
# b는 a > 4 조건이 적용된 Boolean 값이 든 배열
b = a > 4
print(b)
>>> [[False False False False]
[False True True True]
[ True True True True]]
Boolean 값이 든 b 배열을 a 배열의 index로 삽입
# True인 값들만 출력
print(a[b])
a[b].shape
>>> [ 5 6 7 8 9 10 11]
>>> (7,)
# a[b]에 해당하는 애들만 0 삽입하여 a 출력
a[b] = 0
print(a)
>>> [[0 1 2 3]
[4 0 0 0]
[0 0 0 0]]
Numpy 크기 변경
- .ravel : 1차원으로 변경 = reshape(-1)
- .reshape : 지정한 차원으로 변경
- .T : 전치(Transpose) 변환
# a 배열 생성 & shape 출력
a = np.arange(12).reshape(3,4)
print(a)
print(a.shape)
>>> [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
>>> (3, 4)
ravel
모든 원소를 1차원으로 변경
print(a.ravel())
print(a.reshape(-1))
>>> [ 0 1 2 3 4 5 6 7 8 9 10 11]
>>> [ 0 1 2 3 4 5 6 7 8 9 10 11]
reshape
지정한 차원으로 변경 [3,4] => [2,6]로 변경
a.reshape(2,6)
print(a)
>>> [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
T
[3,4]의 전치(transpose) 변환으로 [4,3] 출력
print(a.T)
print(a.T.shape)
>>> [[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
>>> (4, 3)
vstack & hstack
- np.vstack(): axis=0(열) 기준으로 쌓음. 조금 헷갈리면 열을 기준으로 쌓이니까 기준이 되는 열의 개수가 바뀌지 않는다고 생각하면 된다. 그럼 열이 안 바뀌면 바뀌는 건 행이 된다.
- np.hstack(): axis=1(행) 기준으로 쌓음. 마찬가지로 행이 기준이 되는 거니까 행의 개수는 수정되지 않는다. 그럼 바뀌는 건 열의 개수가 된다.
# a 배열 생성 & 출력
a = np.array([1, 2, 3, 4]).reshape(2, 2)
print(a)
>>> [[1 2]
[3 4]]
# b 배열 생성 & 출력
b = np.array([5, 6, 7, 8]).reshape(2, 2)
print(b)
>>> [[5 6]
[7 8]]
vstack
[2,2] => [4,2]
print(np.vstack((a,b)))
>>> [[1 2]
[3 4]
[5 6]
[7 8]]
hstack
[2,2] => [2,4]
print(np.hstack((a, b)))
>>> [[1 2 5 6]
[3 4 7 8]]
hsplit
- np.hsplit 통해 숫자 1개가 들어갈 경우, X개로 등분
- np.hsplit 통해 리스트로 넣을 경우, axis = 1 (행) 기준 인덱스로 데이터를 분할
# a 배열 생성 & 출력
a = np.arange(12).reshape(2, 6)
print(a)
>>> [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
hsplit에 숫자 하나만 넣은 경우
[2,6] => [2,2] 데이터 3개로 등분
print(np.hsplit(a, 3))
[array([[0, 1],
[6, 7]]), array([[2, 3],
[8, 9]]), array([[ 4, 5],
[10, 11]])]
hsplit에 리스트 넣은 경우
[2,6] => [:, :3], [:, 3:4], [:, 4:]로 분할
a를 모든 행 그리고 3번째 열 ~ 4번째 열 미만 기준으로 분할하여 3개의 array를 반환
print(a)
print(np.hsplit(a, (3,4)))
>>> [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
>>> [array([[0, 1, 2],
[6, 7, 8]]), array([[3],
[9]]), array([[ 4, 5],
[10, 11]])]
'프로그래밍 언어 > Python' 카테고리의 다른 글
[pandas] groupby (0) | 2024.08.04 |
---|---|
[pandas] loc, iloc (0) | 2024.08.04 |
[numpy] 자동 형 변환, 기본 연산 (0) | 2024.08.04 |
[numpy] arange, linspace (0) | 2024.08.04 |
파일 압축 - zlib, gzip, zipfile, tarfile (0) | 2024.08.04 |