HOW TO COMPARE TWO ARRAYS ELEMENTS IN MATLAB

조회 수: 45 (최근 30일)
Micky
Micky 2013년 2월 18일
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
Cedric
Cedric 2013년 2월 18일
편집: Cedric 2013년 2월 18일
Do you always have this type of data and a +/- 1 shift? If so, you don't need to compare vectors to find the location of NaNs and non-NaN elements.
Also, what is the purpose of this approach?

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

채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2013년 2월 18일
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
Azzi Abdelmalek
Azzi Abdelmalek 2013년 2월 19일
Thanks, but no need to arrayfun
idx=sign(aa.*bb)
AA(find(idx==1 | isnan(idx)))=nan
Micky
Micky 2013년 2월 20일
Thanks Azzi

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

추가 답변 (2개)

Image Analyst
Image Analyst 2013년 2월 18일
편집: Image Analyst 2013년 2월 18일
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.

Matthew Whitaker
Matthew Whitaker 2013년 2월 18일
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

카테고리

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