2017-02-11 62 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是這樣的:

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

非常感謝您 –