2013-10-30 17 views
2

我有一個方形的numpy數組,我想從數組中心點的環形區域提取值。我想根據點與中心的距離來設置環的半徑。我通過使用numpy.indices檢索數組索引,但無法找到構建過濾器的有效方法。如果您分享您的意見/建議,我將不勝感激。如何過濾基於索引的numpy數組?

indices = numpy.indices((5, 5)) 
print indices 
[[[0 0 0 0 0] 
[1 1 1 1 1] 
[2 2 2 2 2] 
[3 3 3 3 3] 
[4 4 4 4 4]] 

[[0 1 2 3 4] 
[0 1 2 3 4] 
[0 1 2 3 4] 
[0 1 2 3 4] 
[0 1 2 3 4]]] 

現在我想提取那些索引距離中心點(即(2,2))的距離爲1的點的值。

+0

那麼結果會是什麼樣子? – NPE

+0

@Ophion我在發佈這個問題之前搜索了這個網站。但沒有發現你指向的這個問題。感謝您的鏈接。然而,下面提供的答案給了我一個簡單而直接的答案,對於像我這樣的非程序員來說,這真的很有幫助。再次感謝您提及類似的問題 – rana

回答

2
pt = (2, 2) 
distance = 1 
mask = (indices[0] - pt[0]) ** 2 + (indices[1] - pt[1]) ** 2 <= distance ** 2 
result = my_array[mask] 
+1

另一種方式,'mask = np.hypot(*(indices - pt [:,None,None]))<= distance',這並不像我想象的那麼簡單be:P – askewchan

+0

Sweet,不知道'hypot':) – YXD

+1

查看其他線程 - 這可以通過在'np.indices'上使用'ogrid'來改進,這可以節省大量時間。雖然這並不會返回索引,但它應該給你一個起點,你可以添加中心。 – Daniel