MATLAB: удалить определенные элементы из массива

#arrays #matlab #loops #if-statement #cell

#массивы #matlab #циклы #if-оператор #ячейка

Вопрос:

Вопрос 1: У меня есть массив размером 1×15, состоящий из положительных целых и отрицательных целых чисел. Я хочу реализовать код MATLAB, который сохраняет все положительные целые числа и пропускает ячейки с отрицательным содержимым.

Я попробовал следующее:

 X = [1 2 3 4 5 -10 1 -5 4 6 8 9 2 4 -2];
[r c] = size(X);
for i=1:r
    for j=1:c
        if X(i,j)<0
            X(i,j)=X(i,j 1)
        end
    end
end
 

Вывод должен быть:

 X_new = [1 2 3 4 5 1 4 6 8 9 2 4]
 

Как мне это сделать?


Вопрос 2:

 X = [1 2 3 4 5 -10 1 -5 4 6 8 9 2 4 -2]
Y = [5 3 8 9 4  5 6  7 4 7 9 5 2 1  4]
 

Из вопроса 1,

 X_new = [1 2 3 4 5 1 4 6 8 9 2 4]
 

Мне нужно удалить соответствующие значения, Y чтобы:

 Y_new = [5 3 8 9 4 6 4 7 9 5 2 1]
 

Как мне это выполнить?

Ответ №1:

В MATLAB манипулирование массивами и матрицами может быть выполнено намного проще, чем решения for-loop, в вашей задаче вы можете найти и удалить отрицательное значение в массиве, просто следующим образом:

 Idx_neg = X < 0;  % finding X indices corresponding to negative elements
X ( Idx_neg   ) = [];  % removing elements using [] operator

Y ( Idx_neg  ) = [];   % removing corresponding elements in Y array
 

Комментарии:

1. Y(X<0) = []; не работает. Это не дает мне желаемого массива.