본문 바로가기
파이썬(Python)

넘파이 / numpy 3 - 데이터 추출(인덱싱, 슬라이싱), 스칼라값 수정, 배열 재정립

by 무지성개발자 2021. 8. 3.

인덱싱, indexing, 색인


특징

- 차원축소가 일어납니다.

- 1차 배열을 인덱싱하면 스칼라가되고, 2차 배열을 인덱싱하면 1차 배열이 됩니다.

 

arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
arr, arr.ndim

 

arr[0], arr[0].ndim

# 2차원 배열을 인덱싱하면 1차 배열이 된다.

arr[2][2], arr[-1][-1], arr[2][2].ndim

# 2차원 배열을 두번 인덱싱하면 스칼라가 된다.

 


불리언 인덱싱


arr >= 5

# 배열의 모든 원소들에 접근하여서 0과 비교하여 T/F 값으로 돌려줍니다

 

arr[arr>=5]

# 불리언 인덱싱 결과 차원이 축소되었습니다.

 

t = (arr >= 5) & (arr < 8)

# 5이상 8미만을 동시에 만족하는

h = (arr <= 2) | (arr > 7)

# 2이하와 7초과 둘 중 하나라도 만족하는


 

펜시 인덱싱


- 비연속적인 데이터들을 추출할 수 있습니다.

 

arr[[2, 0, 1]]

 

arr[[2, 0, 1], [1]]

# arr[[2, 0, 1]]에서 중간에 있는 수를 뽑아내기 위해서

# 좌표처럼 [ (2, 1) / (0, 1) / (1, 1) ] 뽑습니다.

 

arr[[2, 0, 1], [1, 2, 2]]

# 좌표처럼 [ (2, 1) / (0, 2) / (1, 2) ] 뽑습니다.

 

arr[[2,1,0]][:2, [2,1,0]]

# 펜시 인덱싱을 사용하고도 차원을 유지하고 싶을 경우


스칼라값 수정 => copy


# 원소 1개 값을 연산해서 수정하였습니다.

# .copy() : 배열을 복사해서 수정하였습니다.

 

arr[2][2] = arr[2][2] * 10
arr[0] = arr[1].copy()
arr


배열 재정립, 형태수정 => reshape


# 0~15까지 수를 데이터4개 특성4개의 형태로 뽑습니다.

 

arr = np.arange(16).reshape((4,4))
arr

 


슬라이싱, slicing, 자르기


특징

- 차원을 유지합니다.

abc[ : 5], abc[0 : 7 : 2]

 

# 1~5번 째까지 뽑아냅니다.

# 1~6번 째까지 2 간격으로 뽑아냅니다.

 


다차원 슬라이싱


- 2차원 [  : ,  : ]

- 3차원 [  : ,  :  ,  :  ]

arr[1:3, : 2]

arr[1, :2]

# 인덱싱을 한 번 표현했기 때문에 1차원이 축소되었습니다.