Я предполагаю, что входные данные содержатся в 5 векторах, называемых i
, j
, y1
, y2
и y3
.Вы можете использовать следующий код:
% Initialize Y
Y = cell(max(i),1);
% Loop to read
for kk=1:max(i)
sel = (i==kk); % Logical array use to select lines according to i
ind = j(sel); % This is in case the input data is not sorted, we'll know where the data has to go in Y{...}
% Start with last column so that Y{ii} is initialized with the good size
Y{kk}(ind,3) = y3(sel);
Y{kk}(ind,2) = y2(sel);
Y{kk}(ind,1) = y1(sel);
end
Если все данные уже отсортированы по i
& j
, вы можете использовать mat2cell
.Для того чтобы узнать число строк для каждого значения i
:
% Initialize Y
count = zeros(max(i),1);
% Loop to count
for kk=1:max(i)
count(kk)=(i==kk);
end
Y = mat2cell([y1,y2,y3] , count);
, все равно потребуется цикл (примечание: использование i
и j
в качестве имен переменных нерекомендуется, так как это может привести к путанице с мнимой единицей i
и может повлиять на производительность. Mathworks рекомендует использовать другие имена переменных и использовать 1i
или 1j
при обращении к мнимой единице.)