HOW TO COMPARE TWO ARRAYS ELEMENTS IN MATLAB
조회 수: 45 (최근 30일)
이전 댓글 표시
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
채택된 답변
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
2013년 2월 19일
Thanks, but no need to arrayfun
idx=sign(aa.*bb)
AA(find(idx==1 | isnan(idx)))=nan
추가 답변 (2개)
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.
댓글 수: 0
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 Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!