2017-04-23 3 views

Antwort

3

Sie können singleton expansion ausnutzen, indem bsxfun:

A = bsxfun(@power, (1:n).', (1:m)); 

In den letzten Matlab Versionen (R2016b an), dank implizite Singleton Erweiterung können Sie bsxfun überspringen und direkt schreiben

A = (1:n).'.^(1:m); 

Oder, für eine leichter lesbare, anfängerfreundliche Version, können Sie zwei Matrizen derselben Größe mitexplizit erstellen 10 und dann gelten .^ (element-wise power):

[ii, jj] = ndgrid(1:n, 1:m); 
A = ii.^jj; 

Noch ein anderer Ansatz Leistung durch wiederholte Multiplikation mit cumprod zu ersetzen ist:

A = cumprod(repmat((1:n).', 1, m), 2); 
+1

Vielen Dank !! –

+0

Wissen Sie, wie Sie dies implementieren: ** A_ {i, j} = 1, Wenn i = j + 1 oder i = j-1 (0, sonst) ** kann ich dies tun mit 'bsxfun (@eq '? –

+0

Du kannst es mit' bsxfun (@minus, ...) 'machen. Ich denke was du willst ist 'abs (bsxfun (@minus, (1: n).', (1: m))) == 1' Überprüfen Sie auch die Funktion 'diag' –

Verwandte Themen