matching from multiple arrays

6 views (last 30 days)
Tooba Sheikh
Tooba Sheikh on 21 Jan 2019
Commented: madhan ravi on 21 Jan 2019
I have an array,
ref = [1 1 0 0 1],
and 3 more arrays
a{1}=[1 0 0 0 1]
a{2}=[1 0 0 0 0]
a{3}=[0 0 1 0 1]
I want to produce an array by comparing ref to all others, such that: if an element in position i in ref matches the element in position i in any of the a{} then it is considered a match otherwise not. In case of a match (ref=1, a=1,0,0), we keep the value of ref (ans=1), otherwise (ref=1, a=0,0,0) the value is flipped (ans=0).
So based on this condition, the output for this example will be
ans=[1 0 0 0 1]
It can easily be done using for loops,
for i=1:5
match=0;
for j=1:3
if(ref(i) == a{j}(i))
ans(i)=ref(i);
match=1;
continue;
end
end
if(~match)
ans(i)=1-ref(i);
match=1;
end
end
but is there a more efficient way to do this?

Accepted Answer

madhan ravi
madhan ravi on 21 Jan 2019
Edited: madhan ravi on 21 Jan 2019
A=vertcat(a{:});
Result= 1*(any(A) & ref)
  2 Comments
Stephen23
Stephen23 on 21 Jan 2019
+1 Neat idea. Could also be on one line:
>> +(any(vertcat(a{:}))&ref)
ans =
1 0 0 0 1
madhan ravi
madhan ravi on 21 Jan 2019
Thank you Stephen!

Sign in to comment.

More Answers (1)

Birdman
Birdman on 21 Jan 2019
One way:
Result=double(ref & (ref==a{1} | ref==a{2} | ref==a{3}))

Categories

Find more on Introduction to Installation and Licensing in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!