给定MATLAB中的稀疏矩阵 A 以及 m 列中非零元素的均值,无论如何都要从均值中减去每列中的非零元素每列,并避免循环列?
我正在寻找有效的解决方案。如果可以使用'bsxfun'可以是一种解决方案。
谢谢
答案 0 :(得分:2)
您可以使用find
的第二个输出来获取列索引;使用那些索引到m
进行减法;并使用logical indexing将结果重新放回A
:
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