2017-03-12 3 views

Antwort

5

Beachten Sie, dass, wenn eine diagonale Matrix ist, dann A * x die Zeilen von x durch die Gewichte angegeben durch die Diagonale in A. für Ihr Problem also skaliert könnten Sie einfach verwenden:

s = [1,2,3; 4,5,6;7,8,9]; 
% 1  2  3 
% 4  5  6 
% 7  8  9 

s = diag([1:size(s,1)]) * s; 
% 1  2  3 
% 8 10 12 
% 21 24 27 
+0

Nice one Linie Lösung. –

+0

Gute Eins. Ich habe es benutzt. – Ajax

2
s = [1,2,3; 4,5,6;7,8,9]; 

1  2  3 
4  5  6 
7  8  9 

[~, y] = size(s); 
a = s(ones(y,1),:).'; 
b = a.*s; 

b = 
    1  2  3 
    8 10 12 
21 24 27 
3

bsxfun verwenden Sie schreiben können:

bsxfun(@times,s,(1:size(s,1)).') 

, die in MATLAB R2016b oder Octave dank implizite Erweiterung kann wie folgt geschrieben werden:

s .* (1:size(s,1)).' 
+1

Ich frage mich, ob es irgendwelche Fragen gibt, die nicht mit 'bsxfun' beantwortet werden können :) – brainkz

+0

Diese Lösung ist auch nützlich. Benutzte es in meinem Code. – Ajax

Verwandte Themen