필터 지우기
필터 지우기

Use logical values to extract a matrix not a vector?

조회 수: 14 (최근 30일)
Xiaohan Du
Xiaohan Du 2018년 6월 18일
답변: Fernando Feijoo 2019년 11월 4일
Hi all,
I have a matrix like this:
M =
6 2 9
7 2 3
9 3 10
10 9 4
6 3 2
and a logical array like this:
logi =
5×3 logical array
1 1 0
1 1 0
1 1 0
0 0 0
0 0 0
If I extract associated values from M using logi:
K>> ext = M(logi)
ext =
6
7
9
2
2
3
but what I want is actually
K>> ext
ext =
6 2
7 2
9 3
So is there a way to extract the values into a matrix using logical operators? Using reshape or whatever to reshape the vector into matrix is forbidden in my case.
  댓글 수: 4
Xiaohan Du
Xiaohan Du 2018년 6월 18일
can it be done if reshape is not forbidden?
Dennis
Dennis 2018년 6월 18일
If your 2 matrices have the same size in the first place:
ext=M.*logi

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

답변 (3개)

Guillaume
Guillaume 2018년 6월 18일
This is going to break in all sort of interesting ways if your logical array wouldn't result in a square matrix. Detecting such situations is left as an exercise to the reader...
[r, c] = find(logi);
ext = M(unique(r), unique(c))

Star Strider
Star Strider 2018년 6월 18일
This will work for this particular problem and perhaps for similar situations. It will not work generically:
A = M.*logi;
C = num2cell(A);
I = cellfun(@eq, C, num2cell(zeros(size(C))));
C(I) = {[]};
ext = cell2mat(C)
ext =
6 2
7 2
9 3

Fernando Feijoo
Fernando Feijoo 2019년 11월 4일

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by