Объединение матриц в цикле for в MatLab

В MatLab у меня есть матрица SimC размером 22 x 4. Я повторно генерирую эту матрицу 10 раз, используя цикл for.

Я хочу получить матрицу U, которая содержит SimC(1) в строках с 1 по 22, SimC(2) в строках с 23 по 45 и так далее. Следовательно, U должен иметь размерность 220 x 4 в конце.

Спасибо!!

Редактировать:

nTrials = 10;
n = 22;
U = zeros(nTrials * n , 4)      %Dimension of the final output matrix

for i = 1 : nTrials

   SimC = SomeSimulation()    %This generates an nx4 matrix 
   U = vertcat(SimC)   

end    

К сожалению, вышеприведенное не работает, так как U = vertcat(SimC) возвращает только SimC вместо конкатенации.


person user138776    schedule 06.12.2014    source источник
comment
Взгляните на vertcat, может быть?   -  person Benoit_11    schedule 06.12.2014
comment
спасибо, vertcat выглядит многообещающе. Однако я не могу заставить его работать в коде:   -  person user138776    schedule 06.12.2014


Ответы (1)


vertcat — хороший выбор, но он приведет к увеличению матрицы. Это не очень хорошая практика для больших программ, потому что это может сильно замедлить работу. Однако в вашей проблеме вы не слишком много раз выполняете цикл, поэтому vertcat в порядке.

Чтобы использовать vertcat, вы НЕ должны предварительно выделять полный окончательный размер матрицы U... просто создайте пустую U. Затем при вызове vertcat вам нужно передать ему обе матрицы, которые вы хотите объединить:

nTrials = 10;
n = 22;
U = []      %create an empty output matrix
for i = 1 : nTrials
    SimC = SomeSimulation();    %This generates an nx4 matrix
    U = vertcat(U,SimC);  %concatenate the two matrices 
end  

Лучший способ сделать это, поскольку вы уже знаете окончательный размер, — предварительно выделить весь U (как вы это сделали), а затем поместить свои значения в U путем вычисления правильных индексов. Что-то вроде этого:

nTrials = 10;
n = 22;
U = U = zeros(nTrials * n , 4);      %create a full output matrix
for i = 1 : nTrials
    SimC = SomeSimulation();    %This generates an nx4 matrix
    indices = (i-1)*n+[1:n];  %here are the rows where you want to put the latest output
    U(indices,:)=SimC;  %copies SimC into the correct rows of U 
end 
person chipaudette    schedule 06.12.2014