2009-10-16 6 views
2

S'il y a une possibilité de simplifier ce code, je l'apprécierais vraiment! J'essaie de me débarrasser des lignes avec des zéros. La première colonne est la date. Si toutes les autres colonnes sont égales à zéro, elles doivent être supprimées. Le nombre de colonnes varie.numpy.extract et numpy.any fonctions, est-il possible de le rendre plus simple?

import numpy as np 

condition = [ np.any(list(x)[1:]) for x in r] 
r = np.extract(condition, r) 

numpy.extract docs

+3

me semble assez simple. de quoi n'es-tu pas content? – SilentGhost

+0

juste estimé que pour ndarray devait être un meilleur moyen, la conversion à la liste, puis la compréhension de la liste avait l'air bizarre – maplpro

Répondre

4

Vous pouvez éviter la compréhension de la liste et utiliser à la place FancyIndexing:

#!/usr/bin/env python 
import numpy as np 
import datetime 
r=np.array([(datetime.date(2000,1,1),0,1), 
      (datetime.date(2000,1,1),1,1), 
      (datetime.date(2000,1,1),1,0), 
      (datetime.date(2000,1,1),0,0),       
      ]) 
r=r[r[:,1:].any(axis=1)] 
print(r) 
# [[2000-01-01 0 1] 
# [2000-01-01 1 1] 
# [2000-01-01 1 0] 

si r est un ndarray, puis r [:, 1:] est une vue avec la première colonne enlevée. r [:, 1:]. Any (axis = 1) est un tableau booléen, que vous pouvez ensuite utiliser comme un "index fantaisie"

+0

Ugh, je ne peux pas lire ceci. Veuillez formater en tant que "Exemple de code". Modifiez votre texte, sélectionnez le code et cliquez sur le bouton "101/010". – steveha

+0

C'est une réponse prometteuse, mais je ne pense pas que ce soit tout à fait correct. Il veut que les lignes soient compressées si elles sont * all * zeroes, et non si une seule valeur est nulle. – steveha

+0

Ok, j'ai modifié mon code par commentaire de steveha – unutbu

Questions connexes