Ответ 1
Это хороший вопрос. Вот некоторые идеи...
Моя первая мысль заключалась в том, что с точки зрения производительности и непрерывной памяти это не имеет значения, если это строка или столбец - они одновременно смежны в памяти. Для многомерного ( > 1D) массива достаточно правильно проиндексировать весь столбец массива (например, v(:,2)
), а не строку (например, v(2,:)
) или другое измерение, потому что в строке (не -колона), он не обращается к элементам, которые смежны в памяти. Однако для вектора строк, который является 1-by-N
, элементы смежны, потому что есть только одна строка, поэтому это не имеет значения.
Во-вторых, проще всего отображать векторы строк в окне команд, тем более, что он обертывает строки длинных массивов. С длинным вектором столбца вы будете вынуждены прокручивать гораздо более короткие массивы.
Больше мыслей...
Возможно, выходной вектор строки из linspace
и logspace
просто согласуется с тем фактом, что colon
(по существу инструмент для создания линейно разнесенных элементов) создает строку:
>> 0:2:16
ans =
0 2 4 6 8 10 12 14 16
Выбор был сделан в начале времени, и это было (возможно?).
Кроме того, соглашение для переменных цикла может быть важным. Строка необходима для определения нескольких итераций:
>> for k=1:5, k, end
k =
1
k =
2
k =
3
k =
4
k =
5
В столбце будет одиночная итерация с переменной нескалярного цикла:
>> for k=(1:5)', k, end
k =
1
2
3
4
5
И, возможно, выходы linspace
и logspace
обычно зацикливаются. Может быть?:)
Но зачем вообще перебирать вектор строки? Ну, как я уже говорил в своих комментариях, это не то, что вектор строк используется для циклов, и он проходит через столбцы выражения цикла. Значение, с for v=M
, где M
является матрицей 2 на 3, существует 3 итерации, где v
- 2-элементный вектор-столбец на каждой итерации. На самом деле это хороший дизайн, если вы считаете, что это связано с разрезанием выражения цикла в столбцы (т.е. Куски смежной памяти!).