그래서 이것은 numpy에 대한 기본적인 질문일지도 모르지만, 어떻게해야하는지 모르겠습니다. 그래서 2D numpy 배열이 있다고 가정 해 봅시다.
import numpy as np
arr = np.array([[ 0., 460., 166., 167., 123.],
[ 0., 0., 0., 0., 0.],
[ 0., 81., 0., 21., 0.],
[ 0., 128., 23., 0., 12.],
[ 0., 36., 0., 13., 0.]])
그리고 하위 배열의 좌표를 원합니다.
[[0., 21,. 0.],
[23., 0., 12.],
[0., 13., 0.]]
나는 내 원래의 배열을 깔끔히 시도하고 사용하여 좌표를 찾아 np.argwhere
다음과 같이
newarr = np.argwhere(arr[2:, 2:] != 0)
#output
#[[0 1]
# [1 0]
# [1 2]
# [2 1]]
실제로 하위 배열의 좌표이지만 원래 배열에 해당하는 좌표를 예상하고 있었는데 원하는 출력은 다음과 같습니다.
[[2 3]
[3 2]
[3 4]
[4 3]]
np.argwhere
원래 배열과 함께를 사용하면 필요하지 않은 많은 좌표를 얻으므로 필요한 것을 얻는 방법을 알아낼 수 없거나 도움이 필요하거나 올바른 방향을 가리킬 수 있다면 감사합니다!
행렬의 왼쪽 상단 모서리에있는 원점과 직교 공간의 4 사분면에있는 행렬 자체를 가정합니다. 가로축에는 열 인덱스가 있고 아래로 내려 오는 세로축에는 행 인덱스가 있습니다.
전체 하위 매트릭스가 (2,2)
좌표에서 원점 이동하는 것을 볼 수 있습니다. 따라서 얻은 좌표가 원점의 하위 매트릭스에 관한 것일 때 다시 되돌리려면 전체 요소를 (2,2)
추가하십시오 (2,2)
.
>>> np.argwhere(arr[2:, 2:] != 0) + [2, 2]
array([[2, 3],
[3, 2],
[3, 4],
[4, 3]])
다른 예 :
>>> col_shift, row_shift = 3, 2
>>> arr[row_shift:, col_shift:]
array([[21., 0.],
[ 0., 12.],
[13., 0.]])
>>> np.argwhere(arr[row_shift:, col_shift:] != 0) + [row_shift, col_shift]
array([[2, 3],
[3, 4],
[4, 3]])
완전히 내부 하위 행렬의 경우 열과 행을 바인딩 할 수 있습니다.
>>> col_shift, row_shift = 0, 1
>>> col_bound, row_bound = 4, 4
>>> arr[row_shift:row_bound, col_shift:col_bound]
array([[ 0., 0., 0., 0.],
[ 0., 81., 0., 21.],
[ 0., 128., 23., 0.]])
>>> np.argwhere(arr[row_shift:row_bound, col_shift:col_bound] != 0) + [row_shift, col_shift]
array([[2, 1],
[2, 3],
[3, 1],
[3, 2]])
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다