【问题标题】:The mean value of non-zero elements in each row of a sparse matrix稀疏矩阵每一行中非零元素的平均值
【发布时间】:2021-06-16 02:40:03
【问题描述】:

在以下稀疏矩阵中:

A=[1 1 1 3];
C = sparse(A',1:length(A),ones(length(A),1),4,4);
C =

   (1,1)        1
   (1,2)        1
   (1,3)        1
   (3,4)        1

>>full(C)

ans =

     1     1     1     0
     0     0     0     0
     0     0     0     1
     0     0     0     0

如何计算每行中非零元素的平均值?我无法在这些稀疏矩阵上使用 matlab 的内置均值函数。 我找到了this similar question,我可以将它应用到我的问题中

[row, ~, v] = find(C);
K>> rowmean = accumarray(row, v, [], @mean);
K>> rowmean 

rowmean =

     1
     0
     1

但是,我希望最后一行的值为零,而不是从答案中删除这一行。

【问题讨论】:

    标签: arrays matlab matrix statistics sparse-matrix


    【解决方案1】:

    方法 1

    可以指定输出大小为accumarray的第三个输入:

    [row, ~, v] = find(C);
    rowmean = accumarray(row, v, [size(C,1), 1], @mean);
    

    如果需要,可以使用accumarray的第六个输入来获得sparse的输出:

    rowmean = accumarray(row, v, [size(C,1), 1], @mean, 0, true);
    

    方法2

    你可以做一些像这样更简单的事情。结果是sparse

    rowmean = sum(C, 2) ./ sum(C~=0, 2); % mean of nonzeros in each row, manually
    rowmean(isnan(rowmean)) = 0; % replace NaN (resulting from 0/0) by 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多