Fitzjerald
@Fitzjerald

Как удалить элемент массива по заданным условиям без использования циклов?

Всем доброго дня, перед мной стоит задача:"Задан произвольный массив, написать программу, которая создает сокращенный массив, в котором элементы из заданного массива, удаляются по условию x(j)<=x(j-n), если j-n>0 или x(j)<=x(N-n+j), если j-n<=0. Где N кол-во элементов заданного массива, а n кол-во элементов сокращенного массива. Проблема в том, что такое задание надо сделать без использования циклов, надо использовать только функции массивов/матриц. Например, с N=6 x=[1 6 5 -7 3 2], при n=3 получаем массив, удовлетворяющий условию: y=[1 6 5] Буду рад просто показанию способа итерации элементов вектора по условию. Заранее, спасибо P.S. Вот мой код, где показано чем я руководствовался, но проблема в том, что создавая вектор индексов, не имею понятия как с основным вектором их связать. Просто без использования циклов вообще себе не представляю.
N = 6;
n = 3;
%x = randi([-100 100],1, N);
x = [1 6 5 -7 3 2];
J = 1:N;
y = find((x(J)<=x(J-n)) & (J-n>0))
  • Вопрос задан
  • 760 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Почитайте про логическое индексирование.
Индексацию в вашем примере нужно делать через функцию mod(J, size(x,2))
В общем как-то так:
y = x(x(J)<=x(mod(J-n, size(x,2))+1));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы