4

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

我有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.),线性索引也不起作用。

真的没有办法使用二维索引吗?

谢谢你的帮助!

4

1 回答 1

4

我认为C = A .* (B~=0);应该工作。在两个稀疏矩阵的逐项乘法中只会访问非零,因此它会很快。

于 2013-06-18T16:37:42.160 回答