delete value from double class by using logical class

1 Ansicht (letzte 30 Tage)
ha ha
ha ha am 20 Mär. 2018
Bearbeitet: ha ha am 20 Mär. 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 Kommentare
Rik
Rik am 20 Mär. 2018
You can't. Arrays in Matlab are always rectangular.
ha ha
ha ha am 20 Mär. 2018
Bearbeitet: ha ha am 20 Mär. 2018
thank @Rik Wisselink

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 20 Mär. 2018
Bearbeitet: Jan am 20 Mär. 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]}

Weitere Antworten (1)

Birdman
Birdman am 20 Mär. 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)={[]}

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by