Possible en double:
MATLAB: How to vector-multiply two arrays of matrices?contraction Tensor dans Matlab
Est-il possible de contracter tenseurs plus dimensions dans Matlab?
Par exemple, supposons que j'ai deux tableaux 3 dimensions, avec ces dimensions:
size(A) == [M,N,P]
size(B) == [N,Q,P]
Je veux contracter A
et B
sur les deuxième et premiers indices, respectivement. En d'autres termes, je veux considérer A
comme un tableau de matrices de taille [M,N]
et B
être un tableau de longueur égale de matrices [N,Q]
; Je veux multiplier ces tableaux élément-par-élément (matrix-by-matrix) pour obtenir quelque chose de la taille [M,Q,P]
.
Je peux le faire via une boucle for:
assert(size(A,2) == size(B,1));
assert(size(A,3) == size(B,3));
M = size(A,1);
P = size(A,3);
Q = size(B,2);
C = zeros(M, Q, P);
for ii = 1:size(A,3)
C(:,:,ii) = A(:,:,ii) * B(:,:,ii);
end
Est-il possible de le faire qui évite la boucle for? (Et peut-être travaille avec des tableaux d'un nombre arbitraire de dimensions?)
possible duplication de [MATLAB: Comment vector-multiplier deux tableaux de matrices?] (http://stackoverflow.com/questions/6580656/matlab-how-to-vector-multiply-two-arrays-of-matrices). Aussi pertinent: [Multiplier une matrice 3D avec une matrice 2D] (http://stackoverflow.com/questions/1745299/multiply-a-3d-matrix-with-a-2d-matrix) – Amro