Как проверить 2 вектора на одинаковые элементы, а затем добавить не похожие элементы в конец матрицы - PullRequest
0 голосов
/ 20 февраля 2019

Используя MATLAB, я хочу проверить 2 вектора, например:

A = [1 2 3 4 5 6 7 8 9 10] 
B = [10 9 8 7 6 11 12 13 14 15] 

и написать матрицу, которая проверяет каждый элемент B, если он находится в A, если он не в A, затем добавьте элемент к A.В итоге у меня должна быть новая матрица H=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15].Я хочу проверить вектор A с конца.Вот код, который у меня сейчас есть:

A=[1 2 3 4 5 6 7 8 9 10]; 
B=[10 9 8 7 6 11 12 13 14 15]; 

for i=A(end:-1:1)
   for j=B(1:1:end)
      if B(j)==A(i)
         pass 
      else
         C=B(j); 
         H=[A,C];  % i want to append the new values at the end of vector A
      end 
    end 
end 

Я получаю ошибку в операторе if: if B(j)==A(i) Индекс превышает количество элементов массива.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Ваша ошибка в том, что переменные вашего цикла i и j содержат элементы A и B, а не индексы в них.

Например, эти два цикла выдают одинаковый вывод:

A = [5,2,1];
for i=A
   disp(i)
end
for i=1:numel(A)
   disp(A(i))
end

Вы должны использовать for i=numel(A):-1:1, а не for i=A(end:-1:1).


Несколько более простая альтернатива однострочнику Сардара такова:

H = unique([A,B]);

В этом случае H всегда сортируется.

0 голосов
/ 21 февраля 2019

Используйте ismember, чтобы найти не похожие элементы B и объедините их с A

H = [A B(~ismember(B,A))];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...