如何基于从另一个数组的搜索来查找数组中的元素

时间:2017-02-11 02:24:21

标签: arrays matlab matrix find elements

想象一下,我有两个阵列:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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