2017-01-17 12 views
2

Предположим, что:Выбор строки которых первый столбец значение отображается по крайней мере один раз в списке

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 

, что это простой способ сделать это? Большое спасибо.

+2

Используйте 'smsmember' для создания логического индекса, который выберет строки:' A (ismember (A (:, 1), id), :) ' –

+0

это работает, спасибо, если вы выразились в качестве ответа Я согласен с этим – Stezzo

+0

Хорошо, сделано :-) –

ответ

4

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

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

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

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

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

A(any(A(:,1).'==id(:), 1), :) 

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

  • Нет связанных вопросов^_^