2013-06-18 55 views
3

感覺應該有一個簡單的解決方案,但我不能找到它訪問在稀疏矩陣的多個元素:MATLAB使用行和列索引矢量

我有稀疏矩陣AB具有相同尺寸n*n。我想創建矩陣C,它複製A中的值,其中B非零。

這是我的方法:

[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

你可以試試'C = A。*(B〜= 0);'? –

+0

是的,非常感謝,這工作!如果你想發佈它作爲答案,我可以正式接受它:) – Lisa

+0

當然。在您對數據進行嘗試之前,我並不完全確定,因爲我們正在談論效率。感謝信用。 –

回答

2

我認爲C = A .* (B~=0);應該工作。在兩個稀疏矩陣的逐次乘法中只能訪問非零,所以它將會很快。