2016-08-23 5 views
1

Я пытаюсь сравнить два вектора разного размера. Например, когда я запускаю код ниже:Сравнение векторов различной длины

A = [1 4 3 7 9]; 
B = [1 2 3 4 5 6 7 8 9]; 

myPadded = [A zeros(1,4)]; 

C = ismember(myPadded,B) 

я получаю следующий результат:

C = 1 1 1 1 1 0 0 0 0 

Однако я хочу вывод, который будет отражать позиции сравниваемых значений, следовательно, я хотел бы выход, который отображается следующим образом:

C = 1 0 1 1 0 0 1 0 1 

Пожалуйста, мне нужна помощь :)

ответ

6

Есть 2 очка. Во-первых, вы записываете входы ismember в неправильном порядке. Кроме того, вам не нужно вырабатывать матрицу. Просто попробуйте ismember(B, A), и вы получите то, что ожидаете.

5

Функция ismember(myPadded, B) возвращает вектор одинакового размера myPadded, указывая, если я-й элемент myPadded присутствует в B.

Чтобы получить то, что вы хотите, просто инвертировать порядок параметров: ismember(B, myPadded).

+0

Здесь кто-то совершил ужасную ошибку. Это совершенно обратное интуитивное. Мороженое всем, кто никогда не сравнивал это сравнение :) – patrik

+0

Я особенно этого не чувствую. Скорее произвольно. Тем не менее, это так же просто, как написать «help ismember» в консоли :-) – dunadar

+1

Я собирался прокомментировать, что вам нужен только 'ismember (B, A)', но @erfan отправил свой ответ. – user1543042

0

Быстрый способ сделать это - использовать логическую индексацию. Это будет работать, только если последняя цифра B включена в A.

A = [1 4 3 7 9]; 
c(A) = 1; % or true. 

предположение в том, что вы хотите Subindex вектор 1: N, так что B всегда B = 1:N. Если последняя цифра не одна, это легко исправить. Просто не забудьте вернуть все в свое предыдущее состояние после того, как вы закончите. Тем не менее, это будет 2 ряда.

Это решение предназначено как специальный корпус, работающий с очень распространенной проблемой.

Смежные вопросы