2014-03-18 161 views
1

這可能是愚蠢的,但基本上,我有一個函數在MATLAB中調用wavedec。該函數對矢量進行小波分解。如何矢量化給定* MATLAB函數?

現在,看看文檔,這個函數的輸入必須是一個向量。

但是,如果我有一個矩陣,我想爲矩陣的每一列調用這個函數呢?最壞的情況下,我可以把它放到for循環中,但我想知道是否有更優雅的方式。 (可能與arrayfun?我不知道)。

謝謝。

回答

1

有可能使用cellfun,您必須將矩陣轉化爲向量的細胞:

mat2cell(M,size(M,1),ones(size(M,2),1)) 

兩者cellfun和arrayfun內部工作迭代,這意味着它並不比一個循環更快。

+2

啊有趣。那麼我不妨寫一個for-loop呢?爲什麼MATLAB不會像這樣初始化矢量化的東西? – Spacey

+0

排除一些可能通過arrayfun/cellfun獲得特殊處理的核心函數(乘法等):無法並行運行兩個函數。除了每個輸入矢量迭代調用「wavedec」之外,像cellfun這樣的函數應該做什麼? – Daniel

+0

不,不是,我的意思是,爲什麼wavedec可以在基礎上運行,比如說fft是?他們爲什麼會這樣設計呢? – Spacey