从列的非零条目中删除列平均值

时间:2015-12-10 00:32:31

标签: matlab mean

给定MATLAB中的稀疏矩阵 A 以及 m 列中非零元素的均值,无论如何都要从均值中减去每列中的非零元素每列,并避免循环列?

我正在寻找有效的解决方案。如果可以使用'bsxfun'可以是一种解决方案。

谢谢

1 个答案:

答案 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