【问题标题】:Remove column mean from nonzero entries of a column从列的非零条目中删除列均值
【发布时间】:2015-12-10 09:14:38
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: matlab mean


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 太棒了!谢谢路易斯
    • @YAS 欢迎您!很高兴这是你想要的
    • 顺便说一句,你也可以使用bsxfun(@minus, A, m).*logical(A),但是bsxfun的中间结果不会稀疏,所以你可能会遇到内存问题
    • 谢谢,确实是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2011-06-12
    • 2011-12-20
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多