Soweit ich das beurteilen kann, sind die Arrays a:d:b
und [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).