2016-04-15 10 views
1

私はマトリックスAの3次元に適用されるサイズN, M, 3のの2Dマトリックスサイズ3, 3の3Dマトリックスを持っています。関連性がある場合、この3DマトリックスはRGB画像です。Matlab 3Dマトリックス変換2次元マトリックスベクトル化による3次元

私の現在のソリューションは、次のようになります。

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]) 

そしてサイズ3XN * Mの行列であるとBを再構築:今

C = reshape(B,3,[]) 

およびマトリックス乗算計算:

D = T*C; 

あなたはその後、再形成し、バック入れ替えする必要があります。

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

何か不足している可能性がありますので、テストしませんでしたが、一般的にこれはうまくいくはずです(そして速いです)

+1

非常に良い!私は 'C 'を転記する必要があると思う。これは私のアプローチでした: 'reshape(T * reshape(permute(A、[3 1 2])、3、[])) '、size(A))' –

+0

@LuisMendoそして私は100倍のスピードアップを得ました! – kostek