NumPy nxn 배열을 슬라이스하고 싶습니다. 해당 배열의 m 행과 열을 임의로 선택 하여 추출합니다 (즉, 행 / 열 수에 패턴이 없음). 새로운 mxm 배열이됩니다. 이 예제에서는 배열이 4x4라고 가정하고 2x2 배열을 추출하고 싶습니다.
배열은 다음과 같습니다.
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
제거 할 행과 열이 동일합니다. 가장 쉬운 경우는 시작 또는 끝에있는 2x2 하위 행렬을 추출하려는 경우입니다.
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
그러나 다른 행 / 열 혼합을 제거해야하는 경우 어떻게해야합니까? 첫 번째와 세 번째 줄 / 행을 제거하여 하위 행렬을 추출해야하는 경우 어떻게해야 [[5,7],[13,15]]
합니까? 행 / 라인의 구성이있을 수 있습니다. 어딘가에서 행과 열 모두에 대한 배열 / 인덱스 목록을 사용하여 배열을 색인화 해야하는 곳을 읽었지만 작동하지 않는 것 같습니다.
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
한 가지 방법을 찾았습니다.
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
이것의 첫 번째 문제는 읽을 수는 없지만 읽을 수는 없다는 것입니다. 누군가가 더 나은 해결책을 가지고 있다면 분명히 듣고 싶습니다.
또 다른 것은 포럼 에서 배열을 사용하여 배열을 인덱싱하면 NumPy가 원하는 배열의 사본을 만들도록 강요하므로 큰 배열로 처리 할 때 문제가 될 수 있다는 것입니다. 그 이유는 무엇입니까 /이 메커니즘은 어떻게 작동합니까?