Supprimer les lignes d'une matrice ne contenant que des 0 avec python

Published: 26 avril 2018

DMCA.com Protection Status

Soit une matrice 2d, de dimension (20,5), intitulée 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]]

Méthode 1

Pour supprimer les lignes ne contenant que des 0 avec python on peut utiliser la syntaxe suivante:

data = data[~np.all(data == 0, axis=1)]

Exemple de code

import numpy as np

data = np.random.choice(10, 100)

data = data.reshape(20,5)

data[3,:] = 0
data[7,:] = 0
data[8,:] = 0
data[14,:] = 0
data[17,:] = 0

print(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)

donne

----- 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)

Méthode 2

Pour supprimer les lignes ne contenant que des 0 avec python on peut aussi utiliser la syntaxe suivante:

 data= np.delete(data,np.where(~data.any(axis=1))[0], axis=0)

en effet

np.where(~data.any(axis=1))[0]

retourne une liste des lignes ne contenant que des 0.

On peut alors aussi supprimer les colonnes ne contenant que des 0:

import numpy as np

data = np.random.choice(10, 100)

data = data.reshape(20,5)

data[:,1] = 0
data[:,4] = 0


print(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)

donne

[[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)

Références