如何根据对另一个数组的搜索来查找数组中的元素

How to find elements in an array based on a search from another 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];

我想要并且喜欢这个:

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

不确定这是否最有效,但这应该可行:

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

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