2011-07-20 30 views
0

我有一個很大的4維矩陣,我希望1)找到那些維度的最小值(即4000x4000的結果),然後2)計算最後兩個維度小於(可以說)最小值的5倍(即給出4000x4000的結果)。我有點難倒就如何做到這一點沒有恢復到for循環在這個Matlab矩陣運算中避免for-loops

有些代碼可能會幫助我的描述:

A  = rand([4000,4000,7,7]); 
B(:,:) = min(A(:,:,1:7;1:7)); % this isn't quite right? 
C  = size(A < 5*B) % obviously totally wrong 

任何指針將是巨大的 - 非常感謝!

+0

如果你寫了for循環,它會給我們一個更好的想法,你試圖做什麼 – Amro

+1

你可能會考慮使用'prctile'而不是最小值的固定倍數。只是一個想法。 –

回答

2

如果我理解這一點正確,下面應該做的工作:

mn = min(min(A,[],3),[],4); 
num = sum(sum(bsxfun(@lt, A, 5*mn),3),4) 
+0

我認爲Amro的答案正是我想要的,將1和2分別改爲3和4,即num = sum(sum(bsxfun(@lt,A,5 * mn),3),4) – trican

+1

@yoda,我認爲你不太對勁:A和mn有不同的維度,所以A <5 * mn已經失敗。此外,Amro的解決方案產生1x1x7x7陣列,而nnz只產生一個數字(所有49個元素的總和)。 –

+0

@trican:如果此解決方案適用於您,您可以標記爲已接受的答案:-)。無論你想得到7x7還是4000x4000的結果,都不是很清楚你的問題,也許你可以清楚這個線程的未來讀者;-)。 –

-1

首先,它應該是rand([4000,4000,7,7])

其次,使用分鐘,你必須這樣做min(A, [], 1)(更換1次與尺寸)

第三,假設你有AB,你想C = sum(sum(A < 5*B))

+2

如果A是4D且B是2D(如OP所述),那麼A <5 * B失敗... –