我喜歡Sven的回答很多,實際上,numpy.where
確實如你所願,正如Hooked提醒我的那樣。但主要是因爲我已經寫出來了,這裏有另一種方法,只是爲了說明一些技巧。my_filter
可以返回相同的形狀的一個布爾陣列作爲輸入的任何功能:
def my_filter(a):
return (10 < a) & (a < 40)
a_mask = my_filter(a)
indices = [ind[a_mask] for ind in numpy.indices(a.shape)]
例如:
>>> a = numpy.arange(100).reshape((10, 10))
>>> def my_filter(a):
... return (min_value < a) & (a < max_value)
...
>>> a_mask = my_filter(a)
>>> [ind[a_mask] for ind in numpy.indices(a.shape)]
[array([1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3]),
array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
4, 5, 6, 7, 8, 9])]
太棒了!感謝您的快速回復。的確,面具就足夠了 - 但是我該如何將這個面具應用於與'a'相同形狀的其他陣列呢? – Katya 2012-03-27 14:59:42
@Katya那是什麼意思?如果你有一個帶有特定掩碼的5x5陣列,你能定義一下應用於4x3或6x6陣列的意思嗎? – Hooked 2012-03-27 15:38:46
@Katya:你是什麼意思的「應用這個面具」?提取相應的元素?我爲此回答了一個句子。 – 2012-03-27 15:53:07