How to break with two conditions
조회 수: 6 (최근 30일)
이전 댓글 표시
I want to break my code
when both m and m2m is smaller than 0
I used the following command, but it gave me error:
if m(:,:,j) < 0 AND m2m(:,:,j) < 0
break % get out of the for-loop
end
% Undefined function 'AND' for input arguments of type 'char'.
% Error in new55 (line 340)
if m(:,:,j) < 0 AND
m2m(:,:,j) < 0
댓글 수: 3
답변 (2개)
Image Analyst
2014년 11월 26일
m(:,:,j) and m2(:,:,j) are not single numbers. They're 2D arrays. I suggest you wrap them in any() or all(), depending on what you're wanting - any element to meet the criteria or all of the elements in the 2D matrix to meet the criteria. Plus use && instead of AND:
if all(m(:,:,j)) < 0 && all(m2m(:,:,j)) < 0
댓글 수: 6
Image Analyst
2014년 11월 29일
편집: Image Analyst
2014년 11월 29일
Mohammad, my code works. The problem is you did not try it. You modified it and broke it. You summed m . I did not do that. I did not sum m. I summed a logical array , gotten by comparing m to 0, and that array has only 0's and 1's in it. Look at this example with your simplified m:
m = [1;-20;-3;4;5];
mSlice = m < 0 % Logical array
In the command window:
mSlice =
0
1
1
0
0
See, mSlice has only 0 and 1 so that when you sum it, there is no way possible that you can get a negative number . Try it again, like I said this time comparing it to 0.
By the way, Adam's way doesn't work either for the same reason mine didn't - all() operating on a 3D array gives a row vector, not a true or false answer. It seems like it should (and that's why I originally proposed it, but when I actually tested it, it didn't.
Adam
2014년 12월 1일
Yeah, I guess a squeeze may be needed and maybe an all( all( ... ) ).
I created functions called
column(x)
row(x)
in our Matlab library that just warp up the functionality for making a matrix a column ( i.e. the (:) notation ) and a row (transpose of column notation) so that I can use them in situations like this because Matlab does not allow syntax like:
m(:,:,j)(:)
which is what you'd need to do to achieve the same thing in non-function syntax.
Andrew Reibold
2014년 11월 26일
Instead of AND, use &&
if m(:,:,j) < 0 && m2m(:,:,j) < 0
'AND' will not work. Make that change and start debugging from there.
댓글 수: 1
Stephen23
2014년 12월 1일
As Image Analyst points out " m(:,:,j) and m2(:,:,j) are not single numbers. They're 2D arrays", so the scalar operator && will not work like that. These arrays need to be wrapped in an all or any (or something similar) before applying the && operator:
if all(m(:,:,j) < 0 ) && all(m2m(:,:,j) < 0 )
참고 항목
카테고리
Help Center 및 File Exchange에서 Multidimensional Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!