我有一个 numpy 数组,例如:
array = [0.2, 0.3, 0.4]
(这个向量实际上是 300k 密集的,我只是用简单的例子来说明)
以及使用 Scipy 创建的稀疏对称矩阵,如下所示:
M = [[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
(表示为密集只是为了说明;在我真正的问题中,它是一个(300k x 300k)稀疏矩阵)
是否可以将所有行乘以数组中的元素,然后对列进行相同的操作?
这将首先导致:
M = [[0 * 0.2, 1 * 0.2, 2 * 0.2]
[1 * 0.3, 0 * 0.3, 1 * 0.3]
[2 * 0.4, 1 * 0.4, 0 * 0.4]]
(行乘以数组中的元素)
M = [[0, 0.2, 0.4]
[0.3, 0, 0.3]
[0.8, 0.4, 0]]
然后列相乘:
M = [[0 * 0.2, 0.2 * 0.3, 0.4 * 0.4]
[0.3 * 0.2, 0 * 0.3, 0.3 * 0.4]
[0.8 * 0.2, 0.4 * 0.3, 0 * 0.4]]
最终导致:
M = [[0, 0.06, 0.16]
[0.06, 0, 0.12]
[0.16, 0.12, 0]]
我试过应用我在这个线程中找到的解决方案,但没有奏效;我按照建议将 M 的数据乘以数组中的元素,然后转置矩阵并应用相同的操作,但结果不正确,仍然不明白为什么!
只是指出这一点,我将运行此操作的矩阵有点大,它有 2000 万个非零元素,所以效率非常重要!
我感谢您的帮助!
编辑:
按位解决方案效果很好。这里计算这个操作需要 1.72 秒,但这对我们的工作来说没问题。天呐!