numpy 有没有办法广播布尔掩码?

siotufzp  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(92)

我在尝试减少基于搜索距离的计算次数。我有N个节点和一个[NxN]布尔掩码,它告诉我哪些节点与其他具有T真值的节点在X距离内。
我还为每个节点提供了[Nx(d)]数据,其中(d)可以是(1)(3)(3x3)。我想要的“稀疏”格式,这是一个[Tx(d)]数组,这样我就可以做矢量计算沿着0轴。现在我这样做:
sparseData=data.repeat(data.shape[0],axis=0).reshape(np.concatenate(([data.shape[0],data.shape])))[mask]
这是可行的,但如果N太大,会导致内存错误,因为我用.repeat创建的[NxNx(d)]数组。如果我这样做:
data[None,...][mask]
它不起作用,但似乎必须有一个更有效的方法来做到这一点。

6mzjoqzu

6mzjoqzu1#

你可以用numpy.broadcast_to创建一个视图,而不是重复数据:

sparseData = np.broadcast_to(data, (data.shape[0],) + data.shape)[mask]

然而,更容易的是基于索引选择数据行:

I, J = np.nonzero(mask)
sparseData = data[I]  # could also use J

相关问题