matching from multiple arrays

조회 수: 7 (최근 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에서 Introduction to Installation and Licensing에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by