2016-10-19 2 views
4

dire que j'ai une matrice:Matlab multiplier chaque ligne de la matrice par un nombre différent

A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ; 10 11 12]; 

Est-il possible de multiplier:
ligne 1 par 1
ligne 2 par 2
ligne 3 par 3
et ainsi de suite?

Je suis capable de le faire avec des boucles for, cependant si c'est pour une affectation où ils veulent que nous utilisions des matrices. Dans l'affectation réelle, A est rempli avec un nombre aléatoire mais chaque ligne qui est multipliée consécutivement.

Merci, toute aide est très appréciée

+2

Avez un coup d'oeil à la fonction 'bsxfun' - elle fait exactement ce que vous cherchez à faire. – MrAzzaman

Répondre

5

Vous avez juste besoin de multiplier une matrice diagonale par A comme ceci.

A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ; 10 11 12]; 
disp(diag([1 2 3 4]) * A); 

1  2  3 
8 10 12 
21 24 27 
40 44 48 
5

Vous pouvez utiliser bsxfun pour ce faire facilement et très rapidement

out = bsxfun(@times, [1 2 3 4].', A) 

Dans les nouvelles versions de Matlab (R2016b et plus récent) vous pouvez réellement remplacer bsxfun avec simplement *

out = [1 2 3 4].' * A;