如果我有两个向量和一个稀疏掩码,其中大部分为0,少数为1,是否有一种有效的方法来计算a
和b
的掩码点积?我的解决方案效率很低,因为它计算了一堆对结果没有贡献的零:
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不需要构建中间数组。