Есть грязный способ сделать этот массив. Я говорю, что это противно, потому что трудно читать, что происходит, пожалуйста, оставьте много комментариев об этом куске кода, если вы его используете!
Вы хотите создать набор индексов 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, ...
, повторяя нечетные (кроме 1, а также убедитесь, что последний не повторяется). Последовательность повторяющихся нечетных значений - это пол или последовательность 1, 2/3, 4/3, 6/3, 8/3, ...
, которую легко сгенерировать: 1:2/3:N
. Это создает последовательность 1, 1, 2, 3, 3, ...
, нам нужно удалить первый элемент.
Оказывается (экспериментируя), что индекс N
не повторяется, если N
нечетно (по желанию), но пропускается, если N
четно. Таким образом, мы генерируем последовательность индекса до N+1
и удаляем последний элемент. Таким образом, N
не повторяется, если нечетное, но всегда присутствует.
Итак, мы имеем:
g = [5; 6; 11; 12; 17; 23; 24; 29; 30]; % input data
indx = floor(1:2/3:numel(g)+1); % indices with odd elements repeated
indx = indx(2:end-1); % remove first and last element
result = g(indx); % index