IT 프로그래밍/파이썬

[Numpy]

기술1 2024. 7. 2. 19:36
반응형

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좌표끼리 모아서 이런 식으로 출력을 하도록 할 수 있는 것입니다. 

 

반응형