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

19 visualizzazioni (ultimi 30 giorni)
Xiaohan Du il 18 Giu 2018
Risposto: Fernando Feijoo il 4 Nov 2019
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 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
Xiaohan Du il 18 Giu 2018
can it be done if reshape is not forbidden?
Dennis il 18 Giu 2018
If your 2 matrices have the same size in the first place:
ext=M.*logi

Accedi per commentare.

### Risposte (3)

Guillaume il 18 Giu 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 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

Star Strider il 18 Giu 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 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

Fernando Feijoo il 4 Nov 2019
M.*logi
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Categorie

Scopri di più su Logical in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by