assume a as 3*2 matrix
a = [1 , 1 ; 2 , 2 ; 3 , 3];
a = a(a(:,2) > 1);
what i expect from the above statement is that I get a 2*2 matrix but instead i get 2 *1 matrix
the same thing when i try and define a logical array based on single column of a variable that is
flag = a(:,2) > 1
a = a(flag);
I can get around this but saying [flag;flag]; and a(flag) and then trying to get a back into its original dimensions but i feel stupid doing this, I guess i need to get some basics right.

 채택된 답변

Oleg Komarov
Oleg Komarov 2011년 7월 22일

0 개 추천

idx = a(:,2) > 1;
a = a(idx,:)
with a(idx) - note no ,: - you're saying to take the elements indexed by idx.
with a(idx,:) you're saying to take the rows indexed by idx.

댓글 수: 2

Nikhil
Nikhil 2011년 7월 22일
Thanks man, can I ask what is the logic behind the statement are we asking to do it for all columns when we say ",:" ?
Oleg Komarov
Oleg Komarov 2011년 7월 22일
Take the rows indexed by idx and the all the columns.
Equivalent syntaxes:
- a(idx,1:end)
- a(idx, : )

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

추가 답변 (0개)

카테고리

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

질문:

2011년 7월 22일

Community Treasure Hunt

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

Start Hunting!

Translated by