HOW TO COMPARE TWO ARRAYS ELEMENTS IN MATLAB
16 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I had an array AA = [ 0.1, 0.2, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3]. Then I got two arrays one shifted left one element and the other shifted right one element and padded with NaN accordingly. Example: shifted versions of arrays aa = [0.2, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3, NaN] and second array as bb = [NaN, 0.1, 0.2, 0.3, 0.2, 0.1, -0.1, -0.2].
I want to compare these arrays and put the result in another array of same size,such that during comparison if the compared elements have the same sign (-/- or +/+) then the new resulted array should get NaN for that comparison entry and if the signs of the compared elements is different(-/+ or +/-), then keep the original value of the original array from where I started i.e AA.
Something like this, after comparing sign of each element of aa and bb, I should get something like this:
result = [ NaN, NaN, NaN, NaN, 0.1, -0.1, NaN, NaN]
I got the shifted versions, I just want to get some idea about comparison described above.
1 Commento
Risposta accettata
Azzi Abdelmalek
il 18 Feb 2013
aa = [0.2, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3, nan]
bb = [nan, 0.1, 0.2, 0.3, 0.2, 0.1, -0.1, -0.2]
idx=arrayfun(@sign ,aa.*bb)
AA(find(idx==1 | isnan(idx)))=nan
3 Commenti
Azzi Abdelmalek
il 19 Feb 2013
Thanks, but no need to arrayfun
idx=sign(aa.*bb)
AA(find(idx==1 | isnan(idx)))=nan
Più risposte (2)
Image Analyst
il 18 Feb 2013
Modificato: Image Analyst
il 18 Feb 2013
Here's one way. Not really compact but at least it's explicit and easy to follow:
AA = [0.1, 0.2, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3]
aa = [0.2, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3, NaN]
bb = [NaN, 0.1, 0.2, 0.3, 0.2, 0.1, -0.1, -0.2]
signAA = sign(AA)
% Process aa
signaa = sign(aa)
nanLocations = isnan(aa)
differentSignsaa = signAA ~= signaa
differentSignsaa(nanLocations) = false
% Process bb
signbb = sign(bb)
nanLocations = isnan(bb)
differentSignsbb = signAA ~= signbb
differentSignsbb(nanLocations) = false
% Create result
result= nan(1, length(AA))
% Transfer values.
indexesToTransfer = differentSignsaa | differentSignsbb
result(indexesToTransfer) = AA(indexesToTransfer)
Produces the output result you stated.
0 Commenti
Matthew Whitaker
il 18 Feb 2013
Try:
AA = [ 0.1, 0.2, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3];
aa = [0.2, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3, NaN];
bb = [NaN, 0.1, 0.2, 0.3, 0.2, 0.1, -0.1, -0.2];
cc = AA;
e = sign(aa)-sign(bb);
cc(e==0|isnan(e)) = NaN
Vedere anche
Categorie
Scopri di più su Matrices and Arrays in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!