Let's consider a 2d matrix of dimension (20,6), called data:
[[3 5 1 8 6][1 8 5 4 0][0 6 8 2 0][0 0 0 0 0][9 2 3 6 0][9 3 9 5 0][4 9 7 6 0][0 0 0 0 0][0 0 0 0 0][1 0 2 0 7][2 8 4 3 5][9 8 8 4 3][1 1 1 7 0][8 9 4 9 9][0 0 0 0 0][5 8 6 7 5][8 4 8 8 5][0 0 0 0 0][5 9 9 6 9][6 9 9 5 9]]
Approach 1
To remove all rows that contain only 0 we can use the following syntax
data = data[~np.all(data == 0, axis=1)]
Example of code
import numpy as npdata = np.random.choice(10, 100)data = data.reshape(20,5)data[3,:] = 0data[7,:] = 0data[8,:] = 0data[14,:] = 0data[17,:] = 0print(data)print('original data shape', data.shape)print('----- after removing rows with only 0 -----')data = data[~np.all(data == 0, axis=1)]print(data)print('new data shape', data.shape)
that returns
----- after removing rows with only 0 -----[[3 5 1 8 6][1 8 5 4 0][0 6 8 2 0][9 2 3 6 0][9 3 9 5 0][4 9 7 6 0][1 0 2 0 7][2 8 4 3 5][9 8 8 4 3][1 1 1 7 0][8 9 4 9 9][5 8 6 7 5][8 4 8 8 5][5 9 9 6 9][6 9 9 5 9]]new data shape (15, 5)
Approach 2
To remove all rows that contain only 0 we can also use the following syntax
data= np.delete(data,np.where(~data.any(axis=1))[0], axis=0)
where
np.where(~data.any(axis=1))[0]
gives a list of rows with only 0 indexes.
One cab also use this approach to remove the columns that contain only 0, example:
import numpy as npdata = np.random.choice(10, 100)data = data.reshape(20,5)data[:,1] = 0data[:,4] = 0print(data)print('original data shape', data.shape)print('----- after removing rows with only 0 -----')print(np.where(~data.any(axis=0))[0])data= np.delete(data,np.where(~data.any(axis=0))[0], axis=1)print(data)print('new data shape', data.shape)
returns
[[7 0 8 8 0][5 0 5 1 0][6 0 2 4 0][5 0 9 8 0][6 0 3 9 0][9 0 6 3 0][3 0 4 6 0][0 0 5 4 0][3 0 1 4 0][9 0 1 2 0][3 0 4 2 0][1 0 3 7 0][0 0 0 3 0][6 0 9 8 0][0 0 2 1 0][9 0 6 2 0][0 0 3 6 0][0 0 6 1 0][6 0 8 0 0][1 0 3 8 0]]original data shape (20, 5)----- after removing rows with only 0 -----[1 4][[7 8 8][5 5 1][6 2 4][5 9 8][6 3 9][9 6 3][3 4 6][0 5 4][3 1 4][9 1 2][3 4 2][1 3 7][0 0 3][6 9 8][0 2 1][9 6 2][0 3 6][0 6 1][6 8 0][1 3 8]]new data shape (20, 3)
References
| Links | Site |
|---|---|
| remove zero lines 2-D numpy array | stackoverflow |
| Finding which rows have all elements as zeros in a matrix with numpy | stackoverflow |
| deleting rows in numpy array | stackoverflow |
| numpy.random.choice | scipy doc |
| numpy.random.uniform | scipy doc |
