Hello, I have the following vector as example:
X=[0, 0; 0.02, 2.3;0.04, 0.4; 0, 0; 0.06, 2.5; 0.08, 3.6; 0, 0; 0.10, 2.5]
I want to remove the zeros and I only want to keep the zeros at the beginning and obtain the following matrix:
X=[0, 0; 0.02, 2.3;0.04, 0.4; 0.06, 2.5; 0.08, 3.6; 0.10, 2.5]
I know this option
X( all(~X,2), : ) = [];
which eliminates all the zeros and then I can add the zeros again at the beggining using
X=vertcat([0 0],X);
but there must be a direct way to do it. I would appreciate the help.

2 Kommentare

Will there always be at least one row of zeros at the beginning?
If so, will there always be exactly one row of zeros at the beginning?
Yes, there will be always zeros at the beginning.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Bruno Luong
Bruno Luong am 18 Aug. 2023
remove = all(~X,2);
remove(1) = false;
X(remove,:) = [];

6 Kommentare

Bruno Luong
Bruno Luong am 18 Aug. 2023
Bearbeitet: Bruno Luong am 18 Aug. 2023
One liner
X([false;all(~X(2:end,:),2)],:)=[];
I think something is missing. Thank you.
Fixed
THANK YOU VERY MUCH. :).
FYI, this solution will not work if there are multiple rows of leading zeros to keep. (That's why I asked if there was always exactly one row of leading zeros.) For example,
X = [0, 0;
0, 0;
2, 3;
5, 7;
0, 0];
X([false;all(~X(2:end,:),2)],:)=[]
X = 3×2
0 0 2 3 5 7

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by