I ran into this issue writing a program using logical indexing. Suppose you have
A=ones(32,10);
M=zeros(32,10);
N=ones(1,10);
for i=1:32;
M(i,:)=N;
end
M=logical(M);
C=A(M);
Why is C a 320x1? Shouldn't it be equal to A since the logical is all 1's? Thanks, Charles

 채택된 답변

Yu Jiang
Yu Jiang 2014년 8월 27일
편집: Yu Jiang 2014년 8월 27일

0 개 추천

This is the intended behavior of Logical indexing. For example,
A = [1 2; 3 4];
Then, A(logical([1,1;1,1])) will return A(:), which is equal to
[1;
3;
2;
4].
And A(logical([1,0;0,1])) will return
[1;
4]
You can find more examples via the following link

댓글 수: 3

Why does
A=[1 2 3 4 5]
B=A>2
C=A(B)
return C=[3 4 5] and not C=[3;4;5]?
Yu Jiang
Yu Jiang 2014년 8월 27일
Senaasa
You are right. It seems for row vectors, the results are kept as rows. However, if A is a matrix (with more than one row), the result will always be a column vector.
Senaasa
Senaasa 2014년 8월 27일
Thanks for your quick replies. I guess I've only ever used 1 row when using logicals, so I never noticed this issue.
Thanks for your help

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

질문:

2014년 8월 27일

댓글:

2014년 8월 27일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by