【发布时间】:2021-07-21 10:03:39
【问题描述】:
假设我在 R^n 中有两个密集向量 a 和 b。我正在尝试计算以下矩阵 S 定义为
S[i,j] = a[i]+b[j] for (i,j) in P,
否则S[i,j] = 0,
其中 P 是 [0, ..., n]^2 中的稀疏子集。现在,我当然可以计算完整的外积,然后使用稀疏子集 P 来形成 S,但我想知道是否有一种方法可以仅在需要时计算 S 的条目,即是否存在在实际计算条目之前馈送集合 P 的方法,以避免计算 n^2 和。我试图寻找这个问题的解决方案,但没有找到任何东西。
提前致谢!
【问题讨论】:
-
将其翻译成
numpy代码,带有小样本a、b和P。如果这些是正常的numpy数组,包括P的 0/1 值,(a[:,None]+b)*P可能是最快的,因为它最大限度地利用了已编译的 numpy 方法。如果P已经是csr稀疏矩阵,我们也许可以改进它(只要它足够稀疏)。 -
我认为你需要看看 Python 生成器、迭代器和产量。 Pythion 的这一方面允许您为计算结果设置占位符,但在使用该值之前不会进行实际计算。
标签: python numpy scipy sparse-matrix