numpy中有效的掩码点积



如果我有两个向量和一个稀疏掩码,其中大部分为0,少数为1,是否有一种有效的方法来计算ab的掩码点积?我的解决方案效率很低,因为它计算了一堆对结果没有贡献的零:

a = np.random.normal(size=1000)
b = np.random.normal(size=1000)
m = np.random.choice([0,1], size=1000, p=[0.99, 0.01])
prod = np.sum(a*b*m)

(在我的实际问题中,我有n-dim数组,而不是1-dim,但问题是一样的(

mask = np.where(m > 0)
np.sum(a[mask] * b[mask])

===更新===

正如评论人士所指出的,将第二行写为CCD_ 3稍快。据推测,Numpy不需要构建中间数组。

最新更新