2014-01-06 37 views
0

假設我有一個具有給定shape的二維numpy數組,我希望根據值的位置獲得滿足謂詞的值的視圖。也就是說,如果xy是相應的列和行索引,並且謂詞爲x>y,則函數應只返回列索引大於行索引的數組值。根據位置謂詞過濾numpy數組

簡單的方法是雙循環,但我想可能更快(vectorized也許?)方法?

有沒有更好的方法?

回答

3

在一般情況下,你可以通過建立對應於行/列索引的開放網格做到這一點,應用您的謂詞取得布林面具,然後索引到你的陣列使用這種面膜:

A = np.zeros((10,20)) 
y, x = np.ogrid[:A.shape[0], :A.shape[1]] 
mask = x > y 
A[mask] = 1 

您的具體示例恰好是上三角形 - 您可以使用np.triu獲取它的副本,或者您可以使用np.triu_indices獲取相應的行/列索引。

+0

我知道meshgrid會幫助我,但我不知道如何。謝謝!。 *這個例子只是一個特例。 –