MATLAB使用行和列索引向量访问稀疏矩阵中的多个元素

时间:2013-06-18 16:13:06

标签: matlab sparse-matrix matrix-indexing

我觉得应该有一个简单的解决方案,但我找不到它:

我的稀疏矩阵A B具有相同的维度n*n。我想创建矩阵C,复制AB非零的值。

这是我的方法:

[r,c,v] = find(B);

% now I'd like to create an array of values using indices r and c, 
% but this doesn't work (wrong syntax)
v2 = A(r,c);

% This won't work either
idx = find(B); % linear indexing, too high-dimensional
v2 = A(idx);

% and create C
C = sparse(r,c,v2,n,n);

以下是一些更多细节:

  • 我的矩阵非常大,因此解决方案需要高效。不幸的是,C(B~=0) = B(B~=0);不会这样做。
  • 由于矩阵太大(Matrix is too large to return linear indices.),线性索引不起作用。

真的没有办法使用二维指数吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我认为C = A .* (B~=0);应该有效。在两个稀疏矩阵的逐次乘法中只能访问非零,因此速度很快。