티스토리 뷰

Code/Python

3. 넘파이(numpy) ndarray 다루기

행복한 꿈나무 2021. 6. 24. 10:41
반응형

앞서 2편에서는 ndarray로 변환하는 방법에 대해서 설명을 드렸으면, 계속해서 ndarray의 데이터를 다루는 방법에 대해서 설명을 드릴 예정입니다.
ndarray에 데이터를 넣는게 끝이아니라 다뤄야 원하는 데이터를 볼수가 있습니다. 총 4가지의 방식이에 대해서 설명을 드릴 예정입니다.

1. numpy의 데이터 세트 선택하기 - 단일 값 추출

원하는 위치의 인덱스 값을 지정하고, 해당 위치의 데이터가 반환되는 단일 값 추출을 해보도록 하겠습니다.
단일 값 추출을 하기위한 ndarray를 구성을 하도록 합니다.
우선 아래와 같이 1부터 10까지의 리스트를 가지는 ndarray를 생성을 합니다. np.arange method를 사용하면 쉽게 생성이 가능합니다.
이후 [ ]을 이용하여 원하는 순서의 값을 추출을 합니다. 그러면 python의 경우 인덱스를 0부터 하므로 [2]의 값은 3이라는걸 확인 할 수 있습니다.

그리고 array1[2]의 데이터 타입을 확인해 보면, numpy.int64로 ndarray 형식이 아닌 ndarray내의 데이터값을 의미를 합니다.

값을 추출을 하실때, [-1]을 해게되면 뒤에서 첫번째의 값을 확인 할 수있습니다. 인덱스는 기존 python과 동일합니다. [-1]의 경우 맨마지막 숫자인 9를, [-2]는 뒤에서 두번째 값인 8을 추출할 수 있습니다.

해당 위치의 데이터를 추출을 했으면, 동일한 방법을 이용해서 다른 값으로 변환도 가능합니다. 변경을 하고 싶은 데이터의 인덱스를 지정 후, 변경할 데이터를 기입하면 됩니다. 기존 [0]의 경우 1의 값을 가지고 있었으나 10으로 변경을 하고 [8]의 경우 9의 값을 가지고 있는것을 99로 변경을 할 수 있습니다.

 

지금까진 1차원에 대한 값을 추출을 했다면, 다차원에 대한 데이터 추출을 해보겠습니다. 우선 2차원 ndarray를 생성을 합니다. 이후 동일하게 [0,0] 과 같이 인덱스를 통해서 값을 추출을 합니다.
[0,0]의 경우 row의 0번과, column의 0번에 있는 1의 데이터를 추출을 했습니다. 동일하게 다른 인덱스를 추출을 하면 아래와 같이 데이터를 원하는데로 추출이 가능합니다.

 

계속해서 인덱스를 단일 값이 아닌 연속한 데이터를 추출하는 방법에 대해서 설명을 드리겠습니다.

2. numpy의 데이터 세트 선택하기 - 슬라이싱

슬라이싱은 ':' 를 사용해서 연속한 데이터를 추출 할 수있습니다. 단일 데이터를 제외한 나머지 데이터 추출방식의 타입은 모두 ndarray 타입입니다.
우선 슬라이싱을 하기 위한 ndarray를 생성을 합니다. 이후 [0:3] 으로 데이터 추출 수, 인덱스 0번부터 3번전까지의 데이터인 1, 2, 3 을 추출이 가능합니다.

이외에도 슬라이싱은 아래와 같이 사용이 가능합니다.

  • ':' 앞에 생략 시 - 자동으로 처음 인덱스는 0으로 간주
  • ':' 뒤에 생략 시 - 자동으로 마지막 인덱스까지 간주
  • ':' 앞, 뒤 생략 시 - 자동으로 맨앞부터 맨뒤까지 간주

슬라이싱도 1차원에 대한 데이터를 다뤘다면, 2차원에 대한 데이터도 다뤄보겠습니다.
먼저 2차원에 대한 ndarray를 생성 후, 슬라이싱을 이용하여 추출을 합니다.
아래 그림과 같이 [0:2, 0:2]로 데이터를 슬라이싱을 하면 row 값은 0, 1을 column 값은 동일하게 0,1을 추출을 하여 [[1,2] [4,5]] 인것을 확인 할 수 있습니다.
이외에도 [1:, 0] 처럼 슬라이싱과 단일 값에 대한 것도 같이 사용하여 데이터를 추출 할 수있습니다.

2차원의 배열에서 row에 대한 값만 기입을 하면 2차원 배열이 1차원 배열로 변경이 됩니다. 동일하게 3차원의 배열을 동일하게 row 값만 기입을하면 2차원의 배열로 반환을 합니다.
아래 예시를 보면 이해하기 쉽습니다.

[0], [1]을 선택 후 shape로 확인을 하면 (3, )로 표시가 되는걸로 해당 배열은 1차원으로 확인이 가능합니다.

이어서 Fancy Indexing에 대해서 설명을 드리겠습니다.

3. numpy의 데이터 세트 선택하기 - Fancy Indexing

데이터 추출을 할 때, 특정한 값이나 슬라이싱이 아닌 리스트를 기입을 하여 데이터 추출도 가능합니다.
큰 기능이 있는건 아니므로 바로 예제로 설명을 드리겠습니다.
2차원 배열을 생성 후, [ ] 선택을 위한 row, col 값안에 list를 넣어주시면 됩니다. [[0,1], 2] 를 할 경우
row 값 0~1까지의 값과 col index 값이 2인 값을 반환합니다. 즉 [0, 2] 와 [1, 2] 를 반환하여 [3, 6]이란 값을 반환을 하게 됩니다.
리스트와 슬라이싱을 같이쓰는 것도 동일하게 [0, 0:2] 와 [1, 0:2] 인 [[1, 2], [4, 5]] 를 반환하게 됩니다.

데이터를 추출하는데 마지막 인 Boolean indexing에 대해서 마지막으로 설명을 드리겠습니다.

4. numpy의 데이터 세트 선택하기 - Boolean Indexing

Boolean indexing은 불린 인덱싱이라고도 불리며 조건 필터링과 검색을 동시에 할 수 있기 때문에 매우 자주 사용이 되는 인덱싱 방식입니다. 만약 1차원 ndarray에서 [1,2,3,4,5,6,7,8,9]에서 데이터 값이 5보다 큰 값만 추출을 하고자 하면 일반적으론 반복문인 for 문과, 조건문인 if 문을 사용을 해야 할껍니다.
numpy에서는 Boolean을 이용해서 [ ] 안에 그대로 기입을 하면 됩니다.
자세한 내용은 아래 예제와 함께 설명을 드리겠습니다.

우선 1부터 9까지의 1차 배열을 만들어 줍니다. 이후 [ ] 안에 '내가 원하는 배열은 5 보다 크다' 라는 의미로 [bool_array > 5]를 입력을 하면 아래와 같이 bool_value에는 [6, 7, 8, 9] 가 반환이 됩니다.
이외에 1차 배열의 값에서 > 5 보다 큰 수를 찾고 싶을때 "bool_array > 5" 로 검색을 할 경우, 5보다 아래인 데이터는 False를 5보다 큰 값은 True를 반환합니다.

Boolean을 좀 더 활용을 한다면 Boolean의 방식으로 인덱싱이 가능합니다.
boolean 형태의 1차원 ndarray를 생성 후 이 ndarray를 인덱싱에 사용을 하게되면 True에 맞는 값인 [6,7,8,9]만 반환을 합니다.

직접 index 집합을 만들어서 데이터를 추출을 하는 것과 동일한 결과를 반환합니다.
인덱스 5,6,7,8에 해당하는 값을 추출을 하는 코드입니다.

이렇게 데이터를 추출하고 다루는 방법에대해서 설명을 드렸습니다.
이어서 4편에선 zeroes, ones 등을 가지고 ndarray를 편리하게 생성하는 방법과, ndarray 차원과 크기를 변경 그리고 마지막으로 행렬의 정렬과 numpy 연산에 대해서 설명드리겠습니다.

반응형

'Code > Python' 카테고리의 다른 글

4. 넘파이(numpy) 기초 사용법  (0) 2021.07.02
2. 넘파이(numpy) 기초 사용법  (0) 2021.06.17
1. Numpy를 위한 Anaconda설치 in Mac  (0) 2021.06.17
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday