我有一個大小爲m × n × p × q
的4D矩陣A
。考慮B = A(:,:,1,1)
這是一個m × n
矩陣。我想總結B
的所有元素以給出一個數字。我想爲所有這樣的B
矩陣做所有A
所以最後我會有p
q
矩陣。在matlab中求和沒有for循環的4D矩陣
我該如何做到這一點沒有for循環?
至於三維矩陣(例如A
是3D矩陣)我想這樣的作品爲例,
sum(squeeze(sum(A,1)),1)
但我不知道如何爲一個四維矩陣做到這一點...
我有一個大小爲m × n × p × q
的4D矩陣A
。考慮B = A(:,:,1,1)
這是一個m × n
矩陣。我想總結B
的所有元素以給出一個數字。我想爲所有這樣的B
矩陣做所有A
所以最後我會有p
q
矩陣。在matlab中求和沒有for循環的4D矩陣
我該如何做到這一點沒有for循環?
至於三維矩陣(例如A
是3D矩陣)我想這樣的作品爲例,
sum(squeeze(sum(A,1)),1)
但我不知道如何爲一個四維矩陣做到這一點...
有什麼錯
[m n p q] = size(A);
squeeze(sum(reshape(A, [], p, q), 1))
另外,
squeeze(sum(sum(A, 2), 1))
大概最快:
permute(sum(sum(A)), [3 4 1 2]);
編輯:不,夏嘉曦的第一個解決方案是快:)
我想''permute'複製內存中的元素,因爲數據的重新排序,而'reshape'只改變'A'的頭部而不是它在內存中的內部表示... – Shai
@Shai:也許......個人而言,我懷疑你可能會對'sum'進行雙重調用,因爲你的secnod解決方案與我的性能相當。 –
你的表現相當於什麼?是關於計算的速度? – user3482383
性能的角度來看,這是更好地總結了尾部尺寸(即第三和第四),而不是領先的尺寸(即第一和第二)。所以,如果你可以構造你的矩陣,使它的形狀爲[p q m n],然後求和第三和第四維,那麼它會更快。 – Shai
它有很大的區別嗎?你所擁有的解決方案將用於我所知道的N維矩陣。除此之外,如果不是您的解決方案在清晰度方面更有意義,我會建議您首先總結拖尾維度。我猜想重塑也可能會更快,但它的可讀性略有下降。 – patrik