element wise logical operators?
이전 댓글 표시
I have a question regarding using logical operators on a multi-dimensional array.
I want to firstly test if an element passes a criteria then replace that value with another value given the results of a test.
I want to check the first dimension of the array against the threshold of 0.5 and replace all instances where this is true with a value for only 2 columns of the the 2nd dimension and all cases of the 3rd and 4th dimension. Does anyone know how to do this without multiple for loops?
for example
DA = rand(4,4,2,3);
if DA(:,2:4,:,:)<0.5;
DA(:,2:4,:,:) = 1;
end
thanks Tim
채택된 답변
추가 답변 (2개)
Do you mean this?
DA = rand(4,4,2,3);
DA(DA(:,2:4,:,:)<0.5) = 1;
or perhaps you are talking about this (see the comments below):
DA = rand(4,4,2,3);
tmp = DA(:,2:4,:,:);
tmp(tmp<.5) = 1;
DA(:,2:4,:,:) = tmp;
댓글 수: 3
per isakson
2012년 8월 13일
I run
DA = rand(4,4)
DA(:,2:4)<0.5
DA(DA(:,2:4)<0.5) = 1
and get
DA =
0.5313 0.7788 0.1537 0.4574
0.3251 0.4235 0.2810 0.8754
0.1056 0.0908 0.4401 0.5181
0.6110 0.2665 0.5271 0.9436
ans =
0 1 1
1 1 0
1 1 0
1 0 0
DA =
0.5313 1.0000 1.0000 0.4574
1.0000 1.0000 0.2810 0.8754
1.0000 1.0000 0.4401 0.5181
1.0000 0.2665 0.5271 0.9436
>>
which is confusing although I understand what is happening.
I wasn't sure whether the OP wants this or something more like:
DA = rand(4,4)
tmp = DA(:,2:4);
tmp(tmp<.5) = 1;
DA(:,2:4) = tmp
per isakson
2012년 8월 14일
편집: per isakson
2012년 8월 14일
It turned out, I cannot make sense of the question. OP must help.
However, I found it very hard to grasp
M( logical_index ) = scalar;
when size(M) is not equal to size(logical_index). One dimension is ok, but four is not.
Is there a way to think about it?
OK, now I got the message: Work with sub arrays!
카테고리
도움말 센터 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!