Октава / Матлаб: векторизация оператора '=='? - PullRequest
8 голосов
/ 03 марта 2011

Я могу искать положение значения, то есть 45, в векторе 'data', используя оператор '==' и функцию 'find ()':

data = [ 71 65 23 45 34 12 21 34 52 ];
value = 45;

find (data == value)
ans =  4

Есть лиспособ сделать то же самое для нескольких значений без использования цикла, т.е. я хотел бы получить [4 5 7] за один вызов:

values = [ 45 34 21 ];
find (data == values)
error: mx_el_eq: nonconformant arguments (op1 is 1x9, op2 is 1x3)
error: evaluating argument list element number 1
error: evaluating argument list element number 1

1 Ответ

14 голосов
/ 03 марта 2011

Попробуйте функцию ismember :

data = [ 71 65 23 45 34 12 21 34 52 ];
values = [ 45 34 21 ];

find(ismember(data, values))

Предоставление:

ans =

 4     5     7     8
...