2016-04-12 6 views
0

mldivide\)をMATLABの3Dマトリックスに使用できますか? forループの使用を避けたいですか?Matlabの3Dマトリックスにmldivide ""を使用することは可能です

サンプル:

A = rand(4, 100, 5); 
B = rand(4,4); 

私は実行する必要があります。

C = B\A; 

私が今やっている:

私は、各 "スライス" のためのforループの関数mldivideを適用します。

for i = 1:size(A, 3)  
    C(:,:,i) = B \ A(:,:,i); 
end 
+0

'A(4,100,5)'は 'size(A)= [4 100 5]'を意味しますか? – Crowley

+0

申し訳ありません。編集に行く。 – Pedro77

+1

また、関連しているようです - http://stackoverflow.com/questions/6344800/solving-multiple-linear-systems-using-vectorization – Divakar

答えて

6

0を再形成することができますを2次元行列に変換して除算を行い、その後、予想されるサイズに戻します。 reshapeの操作は、MATLABが基礎となるデータを変更しないため、比較的高速です。

C = reshape(B \ reshape(A, size(A, 1), []), size(B, 1), size(A, 2), []); 

そして、我々はそれを打破する場合:

%// Reshape A to be 4 x 500 
Anew = reshape(A, size(A, 1), []); 

%// Perform left division 
C = B \ Anew; 

%// Reshape C to be the expected size (4 x 100 x 5) 
C = reshape(C, size(B, 1), size(A, 2), []); 

これは、任意の有効な(size(A, 1) == size(B, 2))のために働くべきではAと任意のサイズのB行列します。

関連する問題