2017-02-11 18 views
-2

Представьте, что у меня есть два массива:Как найти элементы массива на основе поиска из другого массива

a = [1 1 1 1 5 5 5 5 5 5 8 8; 
    1 1 1 3 5 5 5 5 5 8 8 8; 
    1 1 3 3 3 5 5 5 8 8 8 8; 
    1 3 3 3 3 3 5 8 8 8 8 8; 
    4 4 4 9 9 0 3 3 8 8 8 8; 
    4 4 4 9 0 0 3 3 3 3 8 8; 
    4 4 9 9 0 0 0 0 0 0 1 1; 
    4 9 9 9 0 0 0 0 0 0 1 1; 
    9 9 9 9 9 0 0 0 7 7 7 7]; 
b = [4 5 7]; 

Я хочу анс так:

ans = 
    0 0 0 0 1 1 1 1 1 1 0 0 
    0 0 0 0 1 1 1 1 1 0 0 0 
    0 0 0 0 0 1 1 1 0 0 0 0 
    0 0 0 0 0 0 1 0 0 0 0 0 
    1 1 1 0 0 0 0 0 0 0 0 0 
    1 1 1 0 0 0 0 0 0 0 0 0 
    1 1 0 0 0 0 0 0 0 0 0 0 
    1 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 1 1 1 1 
+1

Добро пожаловать на SO. Что вы пробовали? Измените свой Q и добавьте соответствующий фрагмент кода. См. Http://stackoverflow.com/help/how-to-ask – xlm

ответ

2

function ismember делает именно это:

ismember(a, b) 

ans = 

    9×12 logical array 

    0 0 0 0 1 1 1 1 1 1 0 0 
    0 0 0 0 1 1 1 1 1 0 0 0 
    0 0 0 0 0 1 1 1 0 0 0 0 
    0 0 0 0 0 0 1 0 0 0 0 0 
    1 1 1 0 0 0 0 0 0 0 0 0 
    1 1 1 0 0 0 0 0 0 0 0 0 
    1 1 0 0 0 0 0 0 0 0 0 0 
    1 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 1 1 1 1 
+0

Большое спасибо. –

0

Не уверен, если это наиболее эффективным, но это должно работать:

c = zeros(size(a)); 
for i = 1:numel(a) 
    if ismember(a(i), b(:)) 
     c(i) = 1 
    end 
end 

Тестирование на некоторых небольших массивов:

octave:1> a = [1 1 5 5 8 8;1 5 1 3 5 8] 
a = 

    1 1 5 5 8 8 
    1 5 1 3 5 8 
octave:2> b = [5 8] 
b = 

    5 8 
octave:3> c = zeros(size(a)); 
for i = 1:numel(a) 
    if ismember(a(i), b(:)) 
     c(i) = 1 
    end 
end 
c = 

    0 0 0 0 0 0 
    0 1 0 0 0 0 

. 
. 
. 

c = 

    0 0 1 1 1 1 
    0 1 0 0 1 0 

c = 

    0 0 1 1 1 1 
    0 1 0 0 1 1 
+0

Большое спасибо –