NumPy에서 2D 배열 슬라이스
이 튜토리얼은 NumPy에서 2D 배열을 슬라이스하는 방법을 소개합니다.
NumPy에서 배열 인덱싱으로 2D 배열 슬라이스
기본 2D NumPy 배열이 있고 여기에서 다른 2D 하위 배열을 추출하려는 경우이 목적을 위해 배열 인덱싱 방법을 사용할 수 있습니다. 이 예에서는4*4
모양의 배열을 취해 보겠습니다. 배열의 첫 번째 요소와 마지막 요소를 추출하는 것은 매우 간단합니다. 예를 들어array[0:2,0:2]
는 배열 내부의 처음 두 요소를 수직 및 수평으로 포함하는 뷰 또는 하위 배열을 제공합니다. 마찬가지로array[2:,2:]
는 배열 내부의 마지막 두 요소를 수직 및 수평으로 포함하는 뷰 또는 하위 배열을 제공합니다. 더 복잡한 작업은 중간 행이나 열을 건너 뛰어 다른 행과 열에서 요소를 가져 오는 것입니다. 다음 코드 예제는 Python에서 배열 인덱싱으로이를 달성하는 방법을 정확하게 보여줍니다.
import numpy as np
x = range(16)
x = np.reshape(x, (4, 4))
print(x)
y = x[[[0], [2]], [1, 3]]
print(y)
출력:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 1 3]
[ 9 11]]
위 코드에서 우리는 Python의 배열 인덱싱 방법으로 행 2와 열 2를 건너 뛰면서 열 1과 3과 교차하는 행 1과 3의 요소를 추출했습니다. 아래 코딩 예제와 같이 유사한 접근 방식을 사용하지만 다른 구문을 사용하여이 작업을 수행 할 수도 있습니다.
import numpy as np
x = range(16)
x = np.reshape(x, (4, 4))
print(x)
y = x[0::2, 1::2]
print(y)
출력:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 1 3]
[ 9 11]]
위의 코드에서 우리는 또한 Python의 배열 인덱싱 방법으로 행 2와 열 2를 건너 뛰면서 열 1과 3과 교차하는 행 1과 3의 요소를 추출했습니다. 이 방법은 너무 많은 대괄호를 포함하지 않고 전반적으로 더 읽기 쉬우므로 이전 방법보다 쉽습니다.
NumPy에서numpy.ix_()
함수를 사용하여 2D 배열 슬라이스
numpy.ix_()
함수는 Python에서 요소의 열린 메시 형식 시퀀스를 형성합니다. 이 함수는n
1D 배열을 취하고 nD 배열을 반환합니다. 이 함수를 사용하여 기본 배열에서 개별 1D 슬라이스를 추출한 다음 결합하여 2D 배열을 형성 할 수 있습니다. 다음 코드 예제는 이전 예제와 동일한 작업을 수행하지만 Python에서 배열 인덱싱과 함께numpy.ix_()
함수를 사용합니다.
import numpy as np
x = range(16)
x = np.reshape(x, (4, 4))
print(x)
y = x[np.ix_([0, 2], [1, 3])]
print(y)
출력:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 1 3]
[ 9 11]]
위의 코드에서 우리는 기본적으로 이전 예제와 똑같은 작업을 수행했지만 Python에서 배열 인덱싱과 함께np.ix_()
함수를 사용했습니다.
이 모든 예의 기본 아이디어는 동일합니다. 메인 배열을 만들 때 모양과 크기에 따라 버퍼가 할당되었습니다. 배열 인덱싱 방법은 기본 배열의 메모리 버퍼를 가리키는 배열 데이터 유형의 새 객체를 만듭니다. 위의 모든 예에서y
가 새 배열이지만 메모리에서 버퍼를 사용하지 않습니다. 배열x
의 메모리 버퍼에서 특정 위치 만 가리 킵니다. 이것이 새로운 배열을 만드는 것보다 배열 인덱싱 방법이 더 나은 이유입니다.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn