【问题标题】:Filter numpy array according to predicate of position根据位置谓词过滤numpy数组
【发布时间】:2014-01-06 11:36:31
【问题描述】:

假设我有一个带有给定 shape 的二维 numpy 数组,并且我想根据值的位置来查看满足谓词的值。也就是说,如果xy 是相应的列和行索引并且谓词x>y 函数应该只返回列索引大于行索引的数组值。

最简单的方法是双循环,但我想要一种可能更快(也许是矢量化?)的方法?

有没有更好的方法?

【问题讨论】:

    标签: python numpy filter predicate


    【解决方案1】:

    一般来说,您可以通过构建一个与行/列索引对应的开放网格网格来做到这一点,应用您的谓词来获取一个布尔掩码,然后使用此掩码对您的数组进行索引:

    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 获取相应的行/列索引。

    【讨论】:

    • 我知道 meshgrid 会帮助我,但我不知道具体如何。谢谢!。 * 这个例子只是一个特例。
    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多