2014-06-16 25 views
-3

我有一個包含一長串數據(時間序列)的向量。我希望找到每60個元素的最大值,而不需要手動C = [max(B(1:60))等等,因爲它是一個相當大的數據集。有沒有一種乾淨的方式來做到這一點?感謝您的任何想法!我很感激。查找我的數據中每60個元素的最大值-MATLAB

+1

重塑爲60xN矩陣,然後沿每列應用最大值。 –

回答

0

作爲另一種選擇,你可以看看blkproc。

A= randn(600,1); 
blkproc(A, [60,1], 'max'); 

blkproc正在被淘汰,所以你也必須看看blockproc。

雖然重塑和最大化可能會更有效,正如評論中提到的那樣。

max(reshape(A, [60, 10])) 

[更新]

作爲一個說明...不使用blkproc :-)。使用非常大的數組(A),blkproc比最大值重構要慢100倍。

2

奧利的建議值得作出正式答案。試試這個:

C = max(reshape(B,60,[])); 
+0

如果數據不是60個元素的精確倍數,會發生什麼情況? –

+0

對於元素數不是'60'的倍數的情況,填充負無窮。因此,如果'B'是一個列向量 - 'max(重塑(padarray(B,60-rem(numel(B),60), - Inf,'post'),60,[]))''。留給你找出行矢量的情況。 – Divakar

+0

這是一個好主意!感謝您的建議。 –

0

你也可以使用'buffer'功能。

A= randn(600,1); 
max(buffer(A,60)); 

這種解決方案即使當向量的長度不是60精確倍數和更快相比於「重塑」功能。

相關問題