2015-12-10 42 views
2

給定一個稀疏矩陣在MATLAB甲和平均在它的列非零元素,反正是有從平均減去在每列中的非零元素每列和避免循環列?刪除列從列的非零項意味着

我正在尋找高效的解決方案。如果可以使用'bsxfun'可能是一個解決方案。

感謝

回答

2

您可以使用find第二輸出,以獲得列索引;用那些索引到m做減法;並把結果返回到A使用logical indexing

A = sparse([0 0 0 0; 1 0 3 2; 2 1 0 5]); %// example data 
m = [1.5 1 3 3.5]; %// vector of mean of nonzero elements of each column 
m = m(:); 
[~, jj, vv] = find(A); 
A(logical(A)) = vv - m(jj); 

原始A

>> full(A) 
ans = 
    0  0  0  0 
    1  0  3  2 
    2  1  0  5 

最終A

>> full(A) 
ans = 
     0   0   0   0 
    -0.5000   0   0 -1.5000 
    0.5000   0   0 1.5000 
+0

真棒!謝謝路易斯 – YAS

+0

@YAS歡迎!很高興這就是你想要的 –

+0

它當然是,速度非常好。 – YAS