Cela me dérange un peu:
Supposons que vous ayez une matrice avec trois couches. p>
existe un moyen simple de multiplier cette matrice avec un vecteur de trois éléments afin que la première couche (tout Les éléments) sont multipliés avec le premier élément du vecteur et ainsi de suite ... p>
Maintenant, je dois utiliser une fonction pour le faire comme ceci: P>
function out=fun(matrix,vector) out=matrix; for k=1:3 out(:,:,k)=out(:,:,k)*vector(k); end
4 Réponses :
Une solution très terres est de Remodeler Vecteur dans une matrice 1 by-1-by-3 et utilisez la fonction BSXFun pour effectuer la multiplication d'éléments-sages (il reproduira les dimensions nécessaires pour correspondre aux tailles des deux arguments d'entrée):
newMatrix = bsxfun(@times,matrix,reshape(vector,[1 1 3]));
J'aimerais que je puisse vous uplifier une fois de plus pour "Rep Beggar" :) Étonnamment, Jonas et quelqu'un d'autre avaient un commentaire similaire aujourd'hui et j'ai dû rappeler aux gens d'étiquette à quelques reprises dans le passé. Il semble certainement que cela semble être un afflux d'adresseurs de questions ponctuelles qui abandonnent le terrain une fois que la question est résolue. Mais alors, je n'ai pas été là assez longtemps, cela pourrait donc être normal.
@YODA: Oui, il est assez courant de voir les utilisateurs de conduite par les utilisateurs qui publient une fois et ne reviennent jamais. Ne peut pas faire beaucoup à ce sujet. Cependant, lorsque je vois un nouvel utilisateur qui pose quelques questions bien écrites sensibles, donne de bons commentaires sur les commentaires et se comporte généralement de manière positive, je pense que cela vaut doucement i> les pointer vers certains FAQ plus du fonctionnement intérieur de si. Je pense qu'ils peuvent être plus susceptibles de revenir s'ils en apprennent davantage à ce sujet et nous avons besoin de plus d'utilisateurs comme ça.
D'accord, et j'aime la façon dont vous l'avez dirigé dans la bonne direction. Je vais voler que pour une utilisation future :)
Il y a une fonction MATLAB appelée Selon la façon dont vous souhaitez organiser vos matrices. P> p> repmat code> qui vous aidera à cela.
Un autre moyen est de répéter le vecteur pour correspondre à la matrice par taille:
out = out.*shiftdim(repmat(vector(:),[1 size(out(:,:,1))]),1)
En plus de Gnovice's Réponse , vous pouvez également reproduire votre Vecteur le long des autres dimensions et effectuez une multiplication sage d'élément direct.
A=randn(1000,1000,3);%# this is your matrix vector=[1,2,3];%# this is your vector [dim1 dim2 ~]=size(A); replicatedVector=repmat(reshape(vector,1,1,3),[dim1,dim2,1]); out=A.*replicatedVector;