【发布时间】:2015-11-05 12:26:01
【问题描述】:
我在 python 中的稀疏矩阵中具有非零元素位置的索引,格式为
(array([0, 1, 2], dtype=int32), array([2, 0, 0], dtype=int32), array([2, 1, 3]))
或矩阵形式
[[0 2]
[1 0]
[2 0]]
我想使用这个(或其他方法,如果有的话)只使用其他矩阵的相应非零元素执行逐行操作,如下所示:
for r in range(rows):
A[r,:] = np.dot(B[r,:],C.T)
基本上我需要一种方法来指定行,并且只从该行中选择与矩阵 B 中的非零元素相对应的元素。
我无法理解的部分是因为每行/列可能有不同数量的条目。
【问题讨论】:
-
只使用非零元素如何改变最终答案?
-
您已经设置了
scipy和sparse-matrix标签。这是否意味着您打算使用scipy.sparse矩阵?他们可以进行矩阵乘法(在编译代码中)。 -
问题是矩阵 B 稀疏而巨大,随后 A 和 C 会很大,因此为了提高效率,我只想完成与非零元素的乘法。零元素比非零元素多得多。我认为解决方案可能涉及 scipy.sparse 但不确定并且愿意接受想法!
-
np.nonzero为您提供非零元素的索引。但即使您知道这些元素的索引,在A和B中对它们进行索引也会比将零元素相乘更损害效率。 -
这种索引是否真的提高了 MATLAB 的速度?如果密度为 0.01 或更小,则可能。但几年前,我使用 MATLAB 稀疏矩阵进行有限元计算。但 sparse 与其说是速度工具,不如说是一种节省内存的工具。
标签: python numpy matrix scipy sparse-matrix