2014-03-31 63 views
0

我正在處理一個包含大量零值的大矩陣。當我將這個矩陣從列表轉換爲交叉表時,我有更多的零值它。我想保持它所有的初始值和與剿所有從MATLAB的average.Here計算添加的零值是什麼,我想要做的一個例子:如何計算僅考慮到某些值的平均值

X =

0.6000 0.6000 5.0000 

0.6000 0.8000 6.0000 

0.6000 0.8500   0 

0.6000 0.8200   0 

0.8000 0.8000 9.0000 

0.8000 0.9000 2.0000 

列表交叉表

NaN 0.6000 0.8000 0.8200 0.8500 0.9000 
0.6000 5.0000 6.0000   0   0   0 Average=(5+6+0+0)/4=2,75 
0.8000   0 9.0000   0   0 2.0000 Average=(9+2)/2=5,5 

在此先感謝

+0

你怎麼知道應該排除哪些零和哪些不應該?你如何從第一個構建第二個數組? –

回答

1

如果你想找到一個矩陣的平均值,而不考慮零,試試這個 -

%%// Given matrix 
x = [NaN 0.6000 0.8000 0.8200 0.8500 0.9000; 
0.6000 5.0000 6.0000   0   0   0; 
0.8000   0 9.0000   0   0 2.0000] 

x1 = x; 
x1(x==0)=NaN; 
rowwise_mean_without_zeros = nanmean(x1,2) %%// mean of rows 
whole_mean_without_zeros = nanmean(x1(:)) %%// mean of the whole matrix 

輸出

rowwise_mean_without_zeros = 

    0.7940 
    3.8667 
    3.9333 


whole_mean_without_zeros = 

    2.4882 
2

爲了計算不包括平均可以使用的零點

result = sum(x(:))/nnz(x); 

爲了計算每行不包括零的意思是:

result = sum(x.')./sum(x.'~=0); 

上述方案假設所有零應該從計算中刪除。

0

下面是一些不應該難以遵循的描述。選擇符合您需求的產品。

假設你想取包含至少1條記錄的組合的平均值,我想你需要更多的信息而不僅僅是結果表。

要麼你需要保留一個索引值,或者你需要在源表中查找它。或者,您也可以使用NaN值初始化表格,並且只在原始列表中出現組合時纔將值放在那裏。


另一種做法只是向計添加到原來的列表,每個值出現的頻率,然後以此爲基礎進行計算。