2014-01-27 63 views
1

假設Mn維數組(數字)。人們也可以想到中號作爲(Ñ   -   ķk維陣列的維數組。我想要生成一個陣列,對應於將一些函數應用於這些k三維數組中的每一個。如何「突出」n-d數組的某些維度?

更精確地,我要生成一個新的(Ñ   -   ķ)維陣列Ñ,其中對於每個小區Ñi的值 ,  , …,  NK -1,  NK)通過應用一個(標量值)函數˚Fķ維陣列在中號 , 獲得 , …,  NK -1,   in-k)。

(F功能通常是一些「彙總函數」,如平均值,中位數,最大或最小值)

我想,要做到這一點的方法就是在一些涉及arrayfun的方式,但我一直無法弄清楚如何獲得arrayfun僅在第一迭代 - 的ñ     ķ)尺寸中號

+0

我的回答對你有幫助嗎? –

+0

是:...接受 – kjo

回答

1

如果您只想將平均值/中值/最大值/最小值等簡單函數應用於矢量,即功能其中這些矢量的ķ維結構是不相關的,那麼這是去的方式:

s = size(M); 
N = reshape(fun(reshape(M, prod(s(1 : end - k)), []).'), s(1 : end - k)); 

此代碼假定fun運行在其參數的第一尺寸,如對於殼體mean,median,minmax以及許多其他Matlab標準函數。

它首先重塑中號成二維陣列,其中第一維對應於所述第一N - k的尺寸中號,和第二維對應於最後ķ尺寸M。通過轉置fun在第二組維度上操作。它返回一個標爲每一列,使得該結果可以被重新成形返回到一個(ñ - K)維陣列對應於所述第一n中的形式的Ñ - K的尺寸中號

相關問題