2014-12-18 125 views
2

考慮多維矩陣A,其中size(A)具有相同的偶數元素N。應該如何找到矩陣Bsize(B)=size(A)/2這樣的:從多維矩陣中提取塊

B(1,1,...,1)=A(1,1,...,1), 
B(1,1,...,2)=A(1,1,...,2), 
... 
B(N/2,N/2,...,N/2)=A(N/2,N/2,...,N/2). 

回答

4

我一般不喜歡arrayfun(或糊塗的功能),但是如果維數是不是在幾千,那麼這應該是蠻好的:

Nv = size(A)/2; 
S = arrayfun(@(x){1:x},Nv); 
B = A(S{:}); 

也應該使用不同尺寸的尺寸。只需決定如何處理尺寸mod(size(A),2)~=0

+0

非常感謝。我認爲N甚至如上所述。 –

+0

對於沒有循環的溶液用'S = repmat({1:尺寸(A,1)/ 2},爲ndims(A),1)' – Daniel

+3

剛剛意識到有不是數千尺寸。最多有47個(或者最近版本中可能有64個)非單身維度。任何超出的內容都不能被索引,並且要求索引大於uint64。在這裏優化是完全沒有必要的,迭代這樣一些值arrayfun是完全沒問題的。 – Daniel