MATLAB - работа с вектором
for i = 1:p
new_array(old_array(i+=1;
end
?
КОнечно, с предварительной инициализацией new_array...
Само собой.
Суть задачи следующая. Надо из вектора [1 1 1 2 2 3 4 4 5 ... ] получить вектор [3 2 1 2 ...]
i-ая координата нового вектора равна количеству координат старого вектора со значением i.
old_array = [1 1 1 2 2 4 4 4 5 5 5 7 9 9]
[a b] = unique(old_array);
c = zeros(1, a(end;
c(a) = diff([0 b])
Так векторизовано.
Это работает для сортированного массива. А если нет пропусков (есть все числа от 1 до max(old_array в твоем примере это так то
old_array = [1 1 1 2 2 3 4 4 5]
[b b] = unique(old_array);
c = diff([0 b])
Надо было внимательнее хелп читать. Я заметил, что unique возвращает индексы последнего вхождения, но не был в этом уверен. Нужен был именно второй вариант.
old_array = [1 1 1 2 2 3 4 4 5]
[b b] = unique(old_array);
b = diff([0 b])
Оставить комментарий
saveliev_a
Суть задачи следующая. Надо из вектора [1 1 1 2 2 3 4 4 5 ... ] получить вектор [3 2 1 2 ...]i-ая координата нового вектора равна количеству координат старого вектора со значением i.
Следующий вариант слишком долго работает.