matching from multiple arrays
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Tooba Sheikh
am 21 Jan. 2019
Kommentiert: madhan ravi
am 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?
0 Kommentare
Akzeptierte Antwort
madhan ravi
am 21 Jan. 2019
Bearbeitet: madhan ravi
am 21 Jan. 2019
A=vertcat(a{:});
Result= 1*(any(A) & ref)
2 Kommentare
Stephen23
am 21 Jan. 2019
+1 Neat idea. Could also be on one line:
>> +(any(vertcat(a{:}))&ref)
ans =
1 0 0 0 1
Weitere Antworten (1)
Birdman
am 21 Jan. 2019
One way:
Result=double(ref & (ref==a{1} | ref==a{2} | ref==a{3}))
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!