matching from multiple arrays

조회 수: 3 (최근 30일)
Tooba Sheikh
Tooba Sheikh 2019년 1월 21일
댓글: madhan ravi 2019년 1월 21일
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?

채택된 답변

madhan ravi
madhan ravi 2019년 1월 21일
편집: madhan ravi 2019년 1월 21일
A=vertcat(a{:});
Result= 1*(any(A) & ref)
  댓글 수: 2
Stephen23
Stephen23 2019년 1월 21일
+1 Neat idea. Could also be on one line:
>> +(any(vertcat(a{:}))&ref)
ans =
1 0 0 0 1
madhan ravi
madhan ravi 2019년 1월 21일
Thank you Stephen!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

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

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by