2017-02-11 4 views
-2

Stellen Sie sich vor, dass ich zwei Arrays:Wie Elemente in einem Array zu finden, basierend auf einer Suche von einem anderen Array

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]; 

Ich will ans wie folgt aus:

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

Willkommen bei SO. Was hast du probiert? Bearbeiten Sie Ihr Q und fügen Sie relevante Codeschnipsel hinzu. Siehe http://stackoverflow.com/help/how-to-ask – xlm

Antwort

2

Die function ismember tut genau das:

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

Vielen Dank. –

0

nicht sicher, ob dies die effizienteste, aber dies sollte funktionieren:

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

Prüfung auf einigen kleineren Arrays:

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

Vielen Dank –

Verwandte Themen