所以我正在使用稀疏矩阵,我必须找到一个非常大的(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。不确定我是否应该删除所有这些。
答案 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);