slicedCol = a[:, 0:1]
print(slicedCol, slicedCol.shape, slicedCol.ndim)
다차원배열 슬라이싱
a[행 슬라이싱 시작:행 슬라이싱 끝, 열 슬라이싱 시작:열 슬라이싱 끝]
a[0:2, 0:4]
// 같다
a[:2, :]
이는 시작값부터 끝값 전까지 슬라이싱이 됩니다.
0부터 2행 전까지(=1행 까지), 0부터 4열 전까지(=3열 까지) 슬라이스가 됩니다. 시작값이 0인 경우는 생략 가능하며 끝값이 shape의 값과 동일한 경우 생략이 가능합니다.
인덱싱
인덱싱을 통해 원소에 접근할 수 있습니다.
a[0, 0]
0행 0열에 있는 원소의 값을 가져옵니다.
a[[0, 2], ]
이 경우 0행과 2행만 가져옵니다.
a[:, [0,1,3]]
0열 1열 3열만 인덱싱을 합니다.
인덱싱&슬라이싱 - 차원
정수 인덱싱과 슬라이싱을 혼합해서 사용하면 낮은 차원의 배열이 생성되지만, 슬라이싱만 사용하면 원본 배열과 동일한 차원의 배열이 생성됩니다.
print(a, a.shape, a.ndim)
[[1]
[5]
[9]] (3, 1) 2
이렇게 나옵니다.
이 코드는 인덱싱과 슬라이싱의 관계를 나타내줍니다.
인덱싱은 값을 복사해서 가져옵니다. 슬라이싱된 배열은 원본 배열과 같은 데이터를 참조합니다. 즉 슬라이싱된 배열을 수정하면 원본 배열 역시 수정됩니다.
그렇기 때문에 참조를 하면 더 빠르게 진행을 할 수 있으며 이는 슬라이싱이 인덱싱보다 더 빠르다는 것을 알 수 있습니다.
슬라이싱은 원본을 가져오는 것이며 범위를 지정하는 것이기 때문에 인덱싱처럼 떨어진 값을 선택할 수는 없습니다. 인덱싱은 값을 복사해오고 슬라이싱은 값을 참조하는 것입니다.
불리언 배열 인덱싱
불리언 배열 인덱싱을 통해 배열 속 요소를 취사선택할 수 있습니다. 불리언 배열 인덱싱은 특정 조건을 만족하게 하는 요소만 선택하고자 할 때 자주 사용됩니다.
import numpy as np
a = np.array([[1,2], [3,4], [5,6]])
print(a)
[[1 2]
[3 4]
[5 6]]
bool_idx = (a > 2)
print(bool_idx)
print(a[bool_idx])
print(a[a>2])
[[False False]
[ True True]
[ True True]]
[3 4 5 6]
[3 4 5 6]
print(a[a>2])는 하나로 만든 식입니다. 조건은 항상 불리언을 바라봅니다. true나 false냐 입니다. true와 false가 반환된 위치에 따라서 하는 것입니다. 이것이 불리언 인덱싱입니다.
수학점수가 90점 이상을 하는 것을 뽑아봐라 이런 것을 할 때 print(a[a>=90]) 이런 식으로 쓰면 됩니다. 이는 데이터를 필터링할 때 많이 쓰이는 것입니다.
불리언배열 인덱싱은 특정 조건을 만족하게 하는 요소만 선택한다는 것을 이제 이해가 갈겁니다.
print(a[[0,1,2], [0,1,0]])
0콤마 0, 1콤마 1, 2콤마 0 x좌표와 y좌표끼리 모아서 이런 식으로 출력을 하도록 할 수 있는 것입니다.
'IT 프로그래밍 > 파이썬' 카테고리의 다른 글
[Numpy] 메서드를 사용한 통계값 구하기 (0) | 2024.07.01 |
---|---|
[Numpy] 다차원 배열 (0) | 2024.07.01 |
[Numpy] 넘파이의 장점, 넘파이를 써야 하는 이유 (0) | 2024.07.01 |
[파이썬] 예외처리, 라이브러리 (0) | 2024.06.02 |
[파이썬] 함수 (0) | 2024.06.02 |