Matlab

2016-04-12 41 views
0

'da 3D matris üzerinde mldivide "\" kullanılması mümkün mü MATLAB içinde 3D matris üzerinde mldivide (\) kullanmak mümkün mü? Bir for döngüsü kullanmaktan kaçınmak isterim?Matlab

Örnek: Şimdi

C = B\A; 

yapıyorum Ne: Ben gerçekleştirmek için gereken

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

her "dilim" için for döngüsü üzerinde mldivide uygula i:

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

"A (4, 100,5)", (A) = [4 100 5] 'boyutunu ifade eder mi? – Crowley

+0

Üzgünüm, evet. Düzenlemeye gidiyor. – Pedro77

+1

Ayrıca, ilgili görünüyor - http://stackoverflow.com/questions/6344800/solving-multiple-linear-systems-using-vectorization – Divakar

cevap

6

0 yeniden şekillendirebilirsinizbölümlendirmeyi gerçekleştirmek için bir 2D matris içine ve daha sonra beklenen boyuta geri. MATLAB'ın temel verileri değiştirmemesi nedeniyle reshape işlemleri nispeten hızlı olmalıdır.

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

Ve biz bu yıkmak eğer:

%// 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), []); 

Bu, herhangi bir geçerli (size(A, 1) == size(B, 2)) için çalışması gerektiğini A ve her boyutta B matrisler.