delete value from double class by using logical class

2 vues (au cours des 30 derniers jours)
ha ha
ha ha le 20 Mar 2018
Modifié(e) : ha ha le 20 Mar 2018
Let's say:
A : 2x7 double class
A=[ 1 2 3 4 5 6 7; 8 9 1 2 3 4 5] ;
A=[ 1 2 3 4 5 6 7
8 9 1 2 3 4 5 ]
B: 2x7 logical class:
B=boolean( [1 0 0 0 0 0 1;1 0 1 1 1 1 1] );
B={ 1 0 0 0 0 0 1
1 0 1 1 1 1 1 }
How to find the matrix C (double class)as follow result from A & B:
C=[ 1 7
8 1 2 3 4 5 ]
C=[1 7; 8 1 2 3 4 5] ????
  2 commentaires
Rik
Rik le 20 Mar 2018
You can't. Arrays in Matlab are always rectangular.
ha ha
ha ha le 20 Mar 2018
Modifié(e) : ha ha le 20 Mar 2018
thank @Rik Wisselink

Connectez-vous pour commenter.

Réponse acceptée

Jan
Jan le 20 Mar 2018
Modifié(e) : Jan le 20 Mar 2018
As said already: Matrices must be rectangular. But you can use a cell array:
A = [ 1 2 3 4 5 6 7; ...
8 9 1 2 3 4 5];
B = logical([ 1 0 0 0 0 0 1; ...
1 0 1 1 1 1 1]);
n = size(A, 1);
C = cell(n, 1);
for k = 1:n
C{k} = A(k, B(k, :));
end
Then:
C = {[1 7]; ...
[8 1 2 3 4 5]}

Plus de réponses (1)

Birdman
Birdman le 20 Mar 2018
Addition to Rik's comment, you should use cell array for this type of problems:
idx=A&~B;
C=mat2cell(A,ones(1,size(A,1)),ones(1,size(A,2)));
C(idx)={[]}

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by