Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

NumPy Python의 기본 슬라이싱 및 고급 인덱싱

<시간/>

ndarrays의 인덱싱은 표준 파이썬 x[obj] 구문을 사용하여 수행할 수 있습니다. 여기서 x는 배열이고 obj는 선택 항목입니다.

세 가지 종류의 인덱싱을 사용할 수 있습니다. -

  • 현장 액세스
  • 기본 슬라이싱
  • 고급 색인 생성

어떤 종류의 인덱싱이 있는지는 obj에 따라 다릅니다. 이 섹션에서는 기본 슬라이싱 및 고급 인덱싱에 주로 집중할 것입니다.

고급 인덱싱을 두 부분으로 나눌 수 있습니다 -

  • 정수 배열 인덱싱
  • 부울 인덱싱

기본 슬라이싱

슬라이싱의 Python 기본 개념은 기본 슬라이싱에서 n 차원으로 확장됩니다. 시작, 중지 및 단계 매개변수를 슬라이스 기능에 제공하여 구성된 파이썬 슬라이스 객체와 마찬가지로. 특정 출력을 얻기 위해 슬라이스 객체가 배열에 전달되어 배열의 일부를 추출합니다.

예시 1

import numpy as np
arr = np.arange(25)
s = slice(2, 21, 4)
print (arr[s])

출력

[ 2 6 10 14 18]

위의 예에서는 먼저 arange() 함수를 사용하여 ndarray 객체(arr)를 생성했습니다. 그런 다음 시작, 중지 및 단계 값을 할당하여 슬라이스 개체를 만듭니다. 슬라이스 객체를 ndarray에 전달할 때 인덱스 2에서 시작하여 4단계로 최대 21까지 배열의 일부(슬라이스)를 얻습니다.

위의 프로그램을 작성하는 또 다른 방법,

# Another way to write above program
import numpy as np
arr = np.arange(25)
s = arr[2:21:4]
print (s)
로 작성하는 또 다른 방법

출력

[ 2 6 10 14 18]

단일 항목 슬라이스

#Slice single item from an array
import numpy as np
arr = np.arange(10)
s = arr[9]
print(s)
로 슬라이스

출력

9

색인에서 시작하는 슬라이스 항목

#slice item starting from index
import numpy as np
arr = np.arange(10)
s = arr[3:]
print(s)

출력

[3 4 5 6 7 8 9]

인덱스 사이 항목 조각

#slice item between indexes
import numpy as np
arr = np.arange(10)
s = arr[3: 7]
print(s)
로 가져오기

출력

[3 4 5 6]

위의 두 가지 방법은 아래와 같이 다차원 ndarray에도 적용됩니다. -

#slice item between indexes
import numpy as np
arr = np.array([[[1],[2],[3]], [[4],[5],[6]], [[7], [8], [9]]])
s = arr[1:]
print(s)

출력

[[[4]
[5]
[6]]
[[7]
[8]
[9]]]

고급 색인 생성

정수 배열 인덱싱:

정수로 간단한 배열을 만들어 봅시다.

arr=np.array([[1,2],[3,4],[5,6]])
print(arr)

출력

[[1 2]
[3 4]
[5 6]]

다차원 ndarray에서 행 인덱스가 [0, 1, 2]이고 열 인덱스가 [1, 0, 1]인 요소와 같이 배열에서 특정 요소를 선택하려고 합니다.

import numpy as np
arr=np.array([[1,2],[3,4],[5,6]])
s = arr[[0, 1, 2],[1, 0, 1]]
print(s)

출력

[2 3 6]

0 인덱스로 선택하면 첫 번째 행이 제공됩니다 -

>>> arr=np.array([[1,2],[3,4],[5,6]])
>>> print(arr[0])
[1 2]

마찬가지로 배열에서 단일 항목을 선택할 수 있습니다. 예를 들어 1을 행 인덱스로 선택하고 1을 열 인덱스 요소로 선택하여 배열 값 4를 제공합니다.

>>> print(arr[[1], [1]])
[4]

덧셈과 같은 산술 연산을 할 수 있고 덧셈을 수행한 후 특정 인덱스의 값을 반환합니다.

>>> print(arr[[1], [1]]+ 1)
[5]

보시다시피 인덱스 값은 1씩 증가하지만 실제 배열은 그대로 유지됩니다.

>>> arr
array([[1, 2],
[3, 4],
[5, 6]])

하지만 배열의 값을 변경하고 배열의 새 복사본을 반환할 수 있습니다.

>>> arr[[1], [1]] +=1
>>> arr
array([[1, 2],
[3, 5],
[5, 6]])

부울 인덱싱

결과가 부울 연산의 결과가 될 때 부울 인덱싱을 사용했습니다.

>>> arr=np.array([[0,1,2], [3,4,5], [6,7,8], [9,10,11]])
>>> arr
array([[ 0, 1, 2],
   [ 3, 4, 5],
   [ 6, 7, 8],
   [ 9, 10, 11]])

1인 값을 반환합니다.

>>> arr[arr == 1]
array([1])

짝수인 값을 반환합니다.

>>> arr[arr %2 == 0]
array([ 0, 2, 4, 6, 8, 10])