Как изменить несколько векторов на основе условия на любом векторе? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть два вектора в MATLAB:

AA = [1 2 3 5 6 7 100 1 4 5];
BB = [1 100 3 4 5 8 9 10 11 12];

Оба имеют одинаковую длину.

Если число 100 появляется в одном из векторов, я хочу заменить его на 0 и соответствующее число в другой матрице (даже если это не 100) на 0,

Желаемый результат:

AA = [1 0 3 6 7 0 1 4 5];
BB = [1 0 3 4 5 0 9 10 11 12];

Я борюсь с решением, я мог подумать о создании третьего вектора и попытаться использовать некоторые логические правила, но я не мог этого добитьсяработает.

CC = [AA' BB'];
% logical rules here

Ответы [ 2 ]

4 голосов
/ 07 ноября 2019

Используйте логический оператор | (ИЛИ), чтобы получить индексы:

AA = [1 2 3 5 6 7 100 1 4 5];
BB = [1 100 3 4 5 8 9 10 11 12];

ind = AA == 100 | BB == 100;
AA(ind) = 0
BB(ind) = 0
3 голосов
/ 07 ноября 2019

Если вы создали матрицу из векторов, вы можете выполнить логическое индексирование с помощью any. Это гибко, если у вас есть более 2 векторов:

C = [AA; BB]; % Each row is one of the original vectors
C( :, any(C == 100, 1)) = 0;

% C = [ 1     0     3     5     6     7     0     1     4     5
%       1     0     3     4     5     8     0    10    11    12 ]
...