2016-04-15 277 views
1

我有3D矩陣A的大小N, M, 3和2D變換T大小3, 3,我適用於矩陣A的第三維。如果相關,這個3D矩陣是一個RGB圖像。Matlab 3D矩陣變換第三維由2D矩陣矢量化

我目前的解決辦法是這樣的:

for i = 1:N 
    for j = 1:M 
     A(i, j, :) = T * [A(i, j, r); A(i, j, g); A(i, j, b)]; 
    end 
end 

不過我很好奇,如果有一種方法向量化呢?

回答

2

你可以試試這個。 首先切換的尺寸,從而所述信道將是第一個:

B = permute(A,[3,1,2]) 

然後重塑B至是尺寸3×N個* M的矩陣:

C = reshape(B,3,[]) 

現在計算的矩陣乘法:

D = T*C; 

然後您需要重新排列並重新排列:

E = permute(reshape(D,3,M,N),[2,3,1]) 

我沒有測試它,所以可能有一些缺失,但通常這應該工作(和快!)

+1

非常好!我認爲你需要調換'C'。這是我的方法:'重塑((T * reshape(permute(A,[3 1 2]),3,[]))。',size(A))' –

+0

@LuisMendo它的工作,謝謝。我得到了100倍的加速! – kostek