Двойные массивы
Вы можете создавать матрицы в MATLAB путем объединения других матриц вместе, если результат прямоугольный. Итак, согласно вашему примеру, новую матрицу/вектор можно создать, выполнив следующие действия, поскольку конкатенация приводит к прямоугольному выводу:
u = rand(10,1);
v = rand(4,1);
newVector = [u;v];
Однако вы не можете просто объединить u
и v
в разные столбцы, поскольку их количество строк различается. Таким образом, необходима какая-то заливка, чтобы сбалансировать количество строк:
newMatrix = [ u , [v ; zeros(length(u)-length(v),1)]];
где несуществующие строки v
были заполнены вектором 0
s. Если вы хотите заполнить NaN, просто умножьте нулевой вектор на NaN
. Если вы не знаете, какая длина у u
или v
больше, вы можете сделать следующее:
maxRows = max([length(u),length(v)]);
nFillRows = abs(length(u) - length(v));
% The fill vector will be empty if the vector has the maximum number of rows
uColumn = [u ; zeros( nFillRows * (length(u) ~= maxRows) ,1)];
vColumn = [v ; zeros( nFillRows * (length(v) ~= maxRows) ,1)];
newMatrix = [uColumn,vColumn];
Чтобы это работало, необходимо знать количество добавляемых строк. Это можно настроить рекурсивно, чтобы сделать newMatrix
все больше и больше (хотя может потребоваться использование size()
, если u
или v
является матрицей, а не вектором); однако динамически растущие массивы могут сильно снизить производительность.
Массивы ячеек
Если целью цикла for является создание списка векторов, которые вы просто хотите сохранить и использовать позже, массив ячеек может быть хорошей структурой данных для использования:
vectorStorage = {u,v};
Поскольку каждый элемент массива ячеек может иметь свой собственный отдельный тип данных, не имеет значения, что u
и v
имеют разную длину. Из командной строки вы увидите это:
>> vectorStorage = {u,v}
vectorStorage =
[10x1 double] [4x1 double]
Первый элемент — вектор u
, а второй элемент — вектор v
. Вы можете вызвать сохраненное значение, указав индекс в фигурных скобках: all(u == vectorStorage{1}) == 1
.
person
TroyHaskin
schedule
16.10.2014
A
, а ваша матрица 4x1 равнаB
, то вы можете сделатьM=[A;B]
. Если вы хотите добавить еще одну матрицу Nx1C
, выполнитеM=[M;C]
. - person David   schedule 16.10.2014