파이썬 Numpy 배열 인덱싱/슬라이싱
numpy 배열 준비
lst1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
arr1 = np.array(lst1)
| array[a:b, c:d]
a ~ b-1, c ~ d-1 까지의 배열을 조회한다.
print(arr1[0:2, 0:2])
print : [[1 2]
[4 5]]
위의 배열에서 0, 1번 행 0, 1번 열의 데이터를 조회한다.
| array[a:, b:]
a번 부터 그 이후의 행과 , b번 부터 그 이후의 열을 조회한다.
print(arr1[1:, 2:])
print : [[ 6]
[ 9]
[ 12]]
1번 부터 이후의 행과, 2번 부터 이후의 열을 조회한다.
| array[a, : ]
아무것도 표시하지 않거나 '', ':' 기호는 전체를 뜻하며 a행의 전체 열 데이터를 조회한다.
print(arr1[0])
print(arr1[0, ])
print(arr1[0, :])
print : [1 2 3]
print : [1 2 3]
print : [1 2 3]
단, 행이 비어 있는 구조는 불가능하다.
print(arr1[, 0])
print : invalid syntax
문법오류 발생
이를 표현하기 위해서는 ':' 기호가 쓰인다.
print(arr1[:, 0])
print : [1 4 7 10]
리스트를 복사할 때는 '='를 통해 복사한다.(주소가 복사됨)
arr2 = np.arange(7)
arr3 = arr2[1:5]
print(arr2)
print(arr3)
arr3[2] = 10
print(arr2)
print(arr3)
print : [0 1 2 3 4 5 6]
print : [1 2 3 4]
print : [0 1 2 10 4 5 6]
print : [1 2 10 4]
# arr3의 2번 행의 값을 10으로 변경하였는데, arr2의 3번 행의 값도 같이 변경되었다.(주소를 복사한 것이기 때문)
| arr[a:b].copy()
이 현상을 방지하기 위해 copy 함수를 사용한다.
arr2 = np.arange(7)
arr3 = arr2[1:5].copy()
print(arr2)
print(arr3)
arr3[2] = 10
print(arr2)
print(arr3)
print : [0 1 2 3 4 5 6]
print : [1 2 3 4]
print : [0 1 2 3 4 5 6]
print : [1 2 10 4]
# copy함수를 쓰면 값만 복사하기 때문에,
arr3의 2번 행의 값이 바뀌었음에도 arr2의 3번 행의 값은 바뀌지 않은 것을 확인할 수 있다.
| array[a, b]
선택한 인덱스를 조회한다.
arr1 : [[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[ 10 11 12]]
print(arr1[0, 2])
print : 3
#0행 2열의 값
| array[[a, b], [c, d]]
array의 a행 c열의 값 및 b행 d열의 값을 조회한다.
print(arr1[[0, 2], [1, 2]])
print : [2 9]
# array [0,1] 그리고 array[2,2]의 값을 조회한다.
'IT > 파이썬' 카테고리의 다른 글
파이썬 Numpy 배열 생성 함수 (0) | 2021.08.08 |
---|---|
파이썬 Numpy 배열 (0) | 2021.08.08 |
파이썬 Numpy 설치 (0) | 2021.08.08 |
파이썬 모듈 사용하기 (0) | 2021.08.07 |
파이썬 모듈 import (0) | 2021.08.07 |