2009-11-24 20 views
1

我想執行一個binning平均值。我正在使用的代碼:我應該如何在MATLAB中執行這種分檔和平均?

Avg = mean(reshape(a,300,144,27)); 
AvgF = squeeze(Avg); 

最後一行刪除了單例尺寸。

所以可以看出我平均超過300點。除了時間點總數不等於144 * 300的倍數時,它工作正常。

即使總點數不是144 * 300的倍數,是否有任何方法可以使此分檔平均值工作?

編輯:對不起,如果我的問題聽起來令人困惑。澄清...

我有一個43200行和27列的文件。我通過一次處理300行來平均,這意味着最後我剩下一個大小爲的矩陣,大小爲144乘以27

我上面寫的代碼只有當我有43200行時才起作用。在某些情況下,我有43199,43194等等。當我有一個300的倍數(bin大小)的行的總數時,重塑功能起作用。當我的總行數不是300的倍數時,是否有辦法讓這個分箱平均值工作?

+2

不知道數據是什麼樣的,一個想法是用'NaN'填充你的數組以達到所需的大小,並使用'nanmean',它和'mean'一樣只忽略NaN值。 – Amro 2009-11-24 01:24:18

+0

你會有多少總積分?一個或兩個?數百?成千上萬的? – gnovice 2009-11-24 06:03:50

+0

在一些文件中,我有86399,其他86395等,相比之下,這是我需要一整天的86400。就像我寫它的工作原理,如果我刪除更多的點,使其等於143 * 300,但我必須手動檢查和刪除點。 所以我想知道是否有一種方法來完成它 – 2009-11-24 13:57:30

回答

2

我想我最好現在明白了問題...

如果a是(n乘27,其中N是理想43200的大小),那麼我認爲你從文件中讀取數據想做到以下幾點:

nRemove = rem(size(a,1),300); %# Find the number of points to remove 
a = a(1:end-nRemove,:);  %# Trim points to make an even multiple of 300 
Avg = mean(reshape(a,300,[],27)); 
AvgF = squeeze(Avg); 

這將刪除這些點的行的a數量將是300的倍數那麼你的重塑和平均應該工作。請注意,我在RESHAPE的調用中使用了[],它可以確定列的數量應該是多少。

+0

你是真棒....弓! 注意:爲什麼我對這個問題有-1? – 2009-11-24 19:08:57

+0

@AP:我估計自從第一個版本有點不清楚以來,有人肯定會低估你的評價。最新版本更有意義,所以也許他們會刪除他們的downvote。 – gnovice 2009-11-24 19:10:49