Выбор строк, значение первого столбца которых появляется в списке хотя бы один раз

Предположим, что:

A = [1,22,33; 2,44,55; 2,66,77]
id = [2 3 5]

Я пытаюсь выбрать все строки матрицы A, если значение их первого столбца появляется в id хотя бы один раз, без использования цикла.

Следовательно, начиная с:

A =

 1    22    33
 2    44    55
 2    66    77

в этом примере я хотел бы получить следующее:

2    44    55
2    66    77

как проще это сделать? Большое спасибо.


person Stefano Lombardi    schedule 17.01.2017    source источник
comment
Используйте ìsmember для создания логического индекса, который будет выбирать строки: A(ismember(A(:,1), id),:)   -  person Luis Mendo    schedule 17.01.2017
comment
это работает спасибо, если вы поставите это как ответ, я приму это   -  person Stefano Lombardi    schedule 17.01.2017
comment
Ладно, готово :-)   -  person Luis Mendo    schedule 17.01.2017


Ответы (1)


Используйте ismember для создания логического индекса, который будет выбирать строки:

A(ismember(A(:,1), id),:)

В качестве альтернативы вы можете использовать any и bsxfun(@eq, ...) вместо ismember:

A(any(bsxfun(@eq, A(:,1).', id(:)), 1), :)

Или, начиная с версии Matlab R2016b, вы можете заменить bsxfun(@eq, ...) только на == благодаря неявное одноэлементное расширение:

A(any(A(:,1).'==id(:), 1), :)
person Luis Mendo    schedule 17.01.2017