Пока ваши векторы имеют разную длину, храните их в cell array.
Есть много было сделать это, вот 3 примера
1) «Наивные» for
петля
g = [];
vars_cell = {A, B, C, ....};
for it = 1 : length(vars_cell)
g = [g; repmat(it,size(vars_cell{it}))];
end
Это способ сделать это работает, но очень медленно с большими кол-во в векторах или большие векторы! Это происходит из-за того, что вы переопределяете g
на каждой итерации, каждый раз меняя свой размер.
2) Не наивный for
петля
vars_cell = {A, B, C, ....};
%find the sum of the length of all the vectors
total_l = sum(cellfun(@(x) length(x),vars_cell));
g = zeros(total_l,1);
acc = 1;
for it = 1 : length(vars_cell)
l = size(vars_cell{it});
g(acc:acc+l-1) = repmat(it,l);
acc = acc+l;
end
Этот метод будет намного быстрее, чем 1-й, потому что она определяет g
только один раз
3) "однострочника"
vars_cell = {A, B, C, ....};
g = cell2mat(arrayfun(@(it) repmat(it, size(vars_cell{it})),1:length(vars_cell),'UniformOutput',0)');
Это qute эквивалентно 2-му решению, но если вам нравится одна строка, это то, что вы ищете!
a for loop? Они предназначены для этого ... –
Да, я использовал для цикла, но думал, есть ли другой способ. Thanx. –