【发布时间】:2014-01-06 11:36:31
【问题描述】:
假设我有一个带有给定 shape 的二维 numpy 数组,并且我想根据值的位置来查看满足谓词的值。也就是说,如果x 和y 是相应的列和行索引并且谓词x>y 函数应该只返回列索引大于行索引的数组值。
最简单的方法是双循环,但我想要一种可能更快(也许是矢量化?)的方法?
有没有更好的方法?
【问题讨论】:
标签: python numpy filter predicate
假设我有一个带有给定 shape 的二维 numpy 数组,并且我想根据值的位置来查看满足谓词的值。也就是说,如果x 和y 是相应的列和行索引并且谓词x>y 函数应该只返回列索引大于行索引的数组值。
最简单的方法是双循环,但我想要一种可能更快(也许是矢量化?)的方法?
有没有更好的方法?
【问题讨论】:
标签: python numpy filter predicate
一般来说,您可以通过构建一个与行/列索引对应的开放网格网格来做到这一点,应用您的谓词来获取一个布尔掩码,然后使用此掩码对您的数组进行索引:
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 获取相应的行/列索引。
【讨论】: