# Use logical values to extract a matrix not a vector?

조회 수: 47(최근 30일)
Xiaohan Du 18 Jun 2018
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

표시 이전 댓글 수: 1
Xiaohan Du 18 Jun 2018
then is it possible to have the corresponding value at logical 1 and 0 at logical 0, so the resulting matrix has the same size as original one?
Xiaohan Du 18 Jun 2018
can it be done if reshape is not forbidden?
Dennis 18 Jun 2018
If your 2 matrices have the same size in the first place:
ext=M.*logi

로그인 to comment.

### 답변 수 (3)

Guillaume 18 Jun 2018
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))

#### 댓글 수: 0

로그인 to comment.

Star Strider 18 Jun 2018
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

#### 댓글 수: 0

로그인 to comment.

Fernando Feijoo 4 Nov 2019
M.*logi

#### 댓글 수: 0

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.

Translated by