2014-05-11 4 views
0

특정 조건을 확인하는 2D 배열의 모든 값 (좌표)을 감지하려면 도움이 필요합니다.마스크가있는 2D NumPy 배열의 특정 값 위치 얻기

import numpy as np 

test2D = np.array([[ 3051.11, 2984.85, 3059.17], 
     [ 3510.78, 3442.43, 3520.7 ], 
     [ 4045.91, 3975.03, 4058.15], 
     [ 4646.37, 4575.01, 4662.29], 
     [ 5322.75, 5249.33, 5342.1 ], 
     [ 6102.73, 6025.72, 6127.86], 
     [ 6985.96, 6906.81, 7018.22], 
     [ 7979.81, 7901.04, 8021. ], 
     [ 9107.18, 9021.98, 9156.44], 
     [ 10364.26, 10277.02, 10423.1 ], 
     [ 11776.65, 11682.76, 11843.18]]) 
:

가 이미 비슷한 질문을했지만, 지금은 ... 마지막 시간을 나에게 관심없는 특정 값을 마스크, 사람이 예를 들어 zip(*np.where(test2D < 5000.))

를 사용하도록 제안

그래서 확인 모든 위치 < 5000 얻을 수 있습니다 : 지금은 어떤 값을 거부 할

positions=zip(*np.where(test2D < 5000.)) 

을하는 (이 조건에서의 인덱스를 반환하지 않는 - ...

답변

1

np.ma.where 측면 마스크

rejectedvalues = np.array([[0, 0], [2, 2], [3, 1], [10, 2]]) 
i, j = rejectedvalues.T 

mask = np.zeros(test2D.shape, bool) 
mask[i,j] = True 
m = np.ma.array(test2D, mask=mask) 

positions2=zip(*np.where(m < 5000.)) 

하지만 positions2 날 위치와 동일 준다 : 내게 쓸모 (그 좌표 배열 S) 예 m < 5000.)가 있습니다.

In [58]: np.asarray(np.column_stack(np.ma.where(m < 5000.))) 
Out[58]: 
array([[0, 1], 
     [0, 2], 
     [1, 0], 
     [1, 1], 
     [1, 2], 
     [2, 0], 
     [2, 1], 
     [3, 0], 
     [3, 2]]) 

는 유사한 표현으로 np.where를 사용하는 것을 비교 :

In [57]: np.asarray(np.column_stack(np.where(m < 5000.))) 
Out[57]: 
array([[0, 0], 
     [0, 1], 
     [0, 2], 
     [1, 0], 
     [1, 1], 
     [1, 2], 
     [2, 0], 
     [2, 1], 
     [2, 2], 
     [3, 0], 
     [3, 1], 
     [3, 2]]) 
관련 문제