105 votes

supprimer des lignes dans un tableau numpy

J'ai un tableau qui pourrait ressembler à ceci :

ANOVAInputMatrixValuesArray = [[ 0.96488889, 0.73641667, 0.67521429, 0.592875, 
0.53172222], [ 0.78008333, 0.5938125, 0.481, 0.39883333, 0.]]

Remarquez que l'une des lignes a une valeur nulle à la fin. Je souhaite supprimer toute ligne contenant un zéro, tout en conservant toute ligne contenant des valeurs non nulles dans toutes les cellules.

Mais le tableau aura un nombre de lignes différent à chaque fois qu'il sera rempli, et les zéros seront situés dans des lignes différentes à chaque fois.

J'obtiens le nombre d'éléments non nuls dans chaque ligne avec la ligne de code suivante :

NumNonzeroElementsInRows    = (ANOVAInputMatrixValuesArray != 0).sum(1)

Pour le tableau ci-dessus, NumNonzeroElementsInRows contient : [5 4]

Le chiffre cinq indique que toutes les valeurs possibles de la ligne 0 sont non nulles, tandis que le chiffre quatre indique que l'une des valeurs possibles de la ligne 1 est nulle.

Par conséquent, j'essaie d'utiliser les lignes de code suivantes pour trouver et supprimer les lignes qui contiennent des valeurs nulles.

for q in range(len(NumNonzeroElementsInRows)):
    if NumNonzeroElementsInRows[q] < NumNonzeroElementsInRows.max():
        p.delete(ANOVAInputMatrixValuesArray, q, axis=0)

Mais pour une raison quelconque, ce code ne semble rien faire, même si l'exécution de nombreuses commandes d'impression indique que toutes les variables semblent se remplir correctement jusqu'au code.

Il doit y avoir un moyen simple de "supprimer toute ligne contenant une valeur nulle".

Quelqu'un peut-il m'indiquer le code à écrire pour y parvenir ?

-1voto

troymyname00 Points 316

Il se peut que j'arrive trop tard pour répondre à cette question, mais je voulais faire part de mon avis pour le bénéfice de la communauté. Pour cet exemple, j'appellerai votre matrice "ANOVA", et je suppose que vous essayez simplement de supprimer les lignes de cette matrice avec des 0 uniquement dans la 5ème colonne.

indx = []
for i in range(len(ANOVA)):
    if int(ANOVA[i,4]) == int(0):
        indx.append(i)

ANOVA = [x for x in ANOVA if not x in indx]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X