Es ist eine gute Frage. Hier sind einige Ideen ...
Mein erster Gedanke war, dass es in Bezug auf Leistung und zusammenhängender Speicher keinen Unterschied macht, ob es eine Zeile oder eine Spalte ist - sie sind beide zusammenhängend im Speicher. Für ein mehrdimensionales (> 1D) Array ist es richtiger, dass es effizienter ist, eine ganze Spalte des Arrays (z. B. v(:,2)
) als eine Zeile (z. B.) oder eine andere Dimension zu indizieren, da dies in der Zeilenspalte (nicht Spalten) liegt Es greift nicht auf Elemente zu, die zusammenhängend im Speicher sind. Für einen Zeilenvektor, der 1-by-N
ist, sind die Elemente zusammenhängend, da es nur eine Zeile gibt, so dass es keinen Unterschied macht.
Zweitens ist es einfach, Zeilenvektoren im Befehlsfenster anzuzeigen, besonders, da es die Reihen von langen Arrays umschließt. Bei einem langen Spaltenvektor müssen Sie für viel kürzere Arrays scrollen.
Weitere Gedanken ...
Vielleicht Vektorausgabe aus linspace
und logspace
Zeile werden nur mit der Tatsache im Einklang sein, dass colon
(im Wesentlichen ein Werkzeug zum Erstellen linear beabstandeten Elemente) macht eine Reihe:
>> 0:2:16
ans =
0 2 4 6 8 10 12 14 16
Die Wahl wurde am Anfang der Zeit getroffen und das war das (vielleicht?).
Auch die Konvention für Schleifenvariablen könnte wichtig sein. Eine Zeile ist notwendig, mehrere Iterationen zu definieren:
>> for k=(1:5)', k, end
k =
1
2
3
4
5
Und vielleicht die Ausgänge der linspace
und logspace
werden üblicherweise geschlungen über:
>> for k=1:5, k, end
k =
1
k =
2
k =
3
k =
4
k =
5
A-Säule eine einzige Iteration mit einem nicht-skalare Schleifenvariable wird . Könnte sein? :)
Aber warum Schleife über einen Zeilenvektor sowieso? Nun, wie ich in meinen Kommentaren sage, ist es nicht so, dass ein Zeilenvektor für Schleifen verwendet wird, sondern dass er die Spalten des Schleifenausdrucks durchläuft. Das heißt, mit for v=M
, wobei M
eine 2-mal-3-Matrix ist, gibt es 3 Iterationen, wobei v
ein 2-Element Spaltenvektor in jeder Iteration ist. Dies ist eigentlich ein guter Entwurf, wenn man bedenkt, dass dies das Aufteilen des Schleifenausdrucks in Spalten (d. H. Stücke zusammenhängender Speicher!) Umfasst.
Das ist eine sehr gute Frage! Meine Vermutung wäre wahrscheinlich, Legacy-Verhalten zu unterstützen. Vielleicht hatten ältere Versionen von MATLAB es ursprünglich als Zeilenvektoren und halten diese Form, um das alte Verhalten zu bewahren ... aber das ist wirklich nur eine Vermutung. Ich bin neugierig, die Antwort auf diese Frage selbst zu wissen. – rayryeng
Weil diese Ausgänge 1D sind (die erste Dimension ist Singleton)? Es ist nicht wirklich wichtig, aber ich würde raten, weil es einfacher ist, die Ausgabe in der Befehlszeile mit Zeilenvektoren zu untersuchen. – chappjc
@chappjc Ich persönlich bevorzuge Spalten in meiner Ausgabe. Ich kann die Überschriften "Spalten 1 bis ..." im Befehlsfenster nicht ertragen ... – Jubobs