稀疏矩阵每行中非零元素的平均值



在以下稀疏矩阵中:

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内置的均值函数。我发现了这个类似的问题,我可以将其应用于我的问题

[row, ~, v] = find(C);
K>> rowmean = accumarray(row, v, [], @mean);
K>> rowmean 
rowmean =
1
0
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

相关内容

  • 没有找到相关文章

最新更新