稀疏矩阵的外链的平均值

时间:2014-12-27 12:17:18

标签: matlab

所以我正在使用稀疏矩阵,我必须找到一个非常大的(10 ^ 6大小)的不同信息,我需要找出外链的平均值。只是为了确保我认为平均值是从3 + 4 + 5/3 = 4得到的,4是平均值。

我想到了这样的事情:

 [row,col] = find(A(:,2),1,'first')

然后我会做1 / numberInThatIndex或类似的东西,因为它是一个S矩阵(很确定它叫做那个)。

我会逐列迭代但是由于某种原因它并没有给我每列中的第一个数字,如果我找到(A(:,1),1,'first')它确实给了我第一个第一列,但如果我将其更改为A(:,2)则不在第二列。

我还需要一些东西来存储该索引以访问该值,我想到了一个2xN向量,但我想这不是最好的主意。我的意思是,find会给我索引,但我需要该索引中的值,然后存储或显示它。不确定我是否正确解释自己,但我正在尝试,抱歉。

为了清楚当我输入A(:,1)和A(:,2)时,它给出了第一列的索引,我不希望这样,我想要从每列找到第一个元素,所以我可以计算出该指数中的数字的平均值。

编辑:好吧看起来确实确实有效,但是当我检查结果时,我把3817而不是3871作为给定的答案,所以当我想要的东西不是零时我发现了0。不确定我是否应该删除所有这些。

1 个答案:

答案 0 :(得分:1)

要解决您的问题,您可以执行以下操作:

numberNonZerosPerColumn = sum(S~=0,1);
meanValue = nanmean(1./numberNonZerosPerColumn);
  • 计算每列n(i)
  • 中非零元素的数量
  • 计算存储在那里的值v(i),这些值由v(i) := 1/n(i)
  • 定义
  • n(i)不为零的那些值的平均值(即汇总所有这些值,其中v(i)不是NaN并除以包含至少一个的列数零)

如果您希望将没有任何非零条目的列视为v(i):= 0,但仍然按照您的意思使用它们,则可以使用:

numberNonZerosPerColumn = sum(S~=0,1);
meanValue = nansum(1./numberNonZerosPerColumn)/size(S,2);