2 votes

Multiplication d'une matrice 4D par un vecteur, et réduction de la dimension 1

J'ai une question concernant la multiplication d'un objet à 4 dimensions par un objet à 1 dimension. En fait, j'ai un objet 4D de taille (15,15,3,5). Je veux multiplier la 4ème dimension en utilisant un vecteur 5x1, réduisant la dernière dimension à 1. Ensuite, je veux utiliser squeeze pour obtenir un objet de taille (15,15,3), en le multipliant à nouveau par un vecteur 3x1, ce qui me laisse une matrice 15x15.

Je peux le faire en boucle, mais c'est assez coûteux. Quelqu'un peut-il me suggérer comment le faire sans boucle ?

Pour l'instant, la boucle :

expectationCalc = reshape(mValueFunction(age+1, :, :, :, :), nGridAssets, nGridHumanCapital, nNetInterestRate, nShockstoHumanCapital);
for i = 1:nGridAssets
    for j = 1:nGridHumanCapital
        expectation(i,j) = mTransitionNetInterestRate(nNetIntRate, :)*(squeeze(expectationCalc(i,j,:,:))*mTransitionShockHumanCapital(ShockHcapital, :)');
    end
end

0voto

Cris Luengo Points 22016

Si vous transformez votre matrice 4D en une matrice 2D, où la deuxième dimension est celle que vous voulez réduire par produit scalaire, et la première dimension contient toutes les autres dimensions, vous pouvez alors appliquer une multiplication matricielle régulière. Le résultat peut alors être remodelé à la taille originale (moins une dimension) :

% Input data
M = randn(15,15,3,5);
v1 = randn(5,1);
v2 = randn(3,1);

% 1st multiplication
sz = size(M);
M = reshape(M,[],sz(end));
M = M * v1;
sz(end) = [];       % We no longer have that last dimension
M = reshape(M,sz);

% 2nd multiplication
M = reshape(M,[],sz(end));
M = M * v2;
sz(end) = [];       % We no longer have that last dimension
M = reshape(M,sz);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X