Durch Doppelpunkt generierte Arrays mit oder ohne Klammern in Matlab

Durch Doppelpunkt generierte Arrays mit oder ohne Klammern in Matlab

Soweit ich das beurteilen kann, sind die Arrays a:d:bund [a:d:b]genau dasselbe. Beispielsweise,

>> [1:3] == 1:3
ans =
  1×3 logical array
   1   1   1

Diese beiden Ausdrücke führen jedoch zu unterschiedlichen Ergebnissen:

>> [1:3]' + 1:3
ans =
     2     3

>> [1:3]' + [1:3]
ans =
     2     3     4
     3     4     5
     4     5     6

Warum?

(Ich verwende Matlab R2017b 9.3.0.713579)

Antwort1

Eine gute Antwort kam von Rik Wisselink in diesem Forum: https://www.mathworks.com/matlabcentral/answers/391046-colon-generated-arrays-with-or-without-brackets

Der Grund hierfür ist die unerwartete Reihenfolge, in der diese Anweisung ausgewertet wird:

[1:3]' + 1:3  
([1:3]' + 1):3  
([1;2;3]+1):3  
[2;3;4]:3  
2:3  
[2,3]  

Das Hinzufügen der Klammern erzwingt die Gruppierung vor und nach dem Doppelpunktoperator (Klammern hätten auch funktioniert).

Stephen Cobeldick fügt hinzu, dass dies dadurch erklärt wird, dass +eine höhere Priorität hat als :.

Steven Lord bemerkt außerdem, dass der Übergang von Zeile 4 zu 5 in der Dokumentation erklärt wird:

Wenn Sie nicht-skalare Arrays angeben, interpretiert MATLAB j:i:k als j(1):i(1):k(1).

verwandte Informationen