103 votes

Le moyen le plus rapide de faire croître un tableau numérique numpy

Exigences :

  • Je dois faire croître un tableau de manière arbitraire à partir de données.
  • Je peux estimer la taille (environ 100-200) sans garantie que le tableau s'adapte à chaque fois.
  • Une fois qu'il a atteint sa taille finale, je dois effectuer des calculs numériques dessus, donc je préférerais finalement obtenir un tableau numpy 2D.
  • La vitesse est critique. Par exemple, pour l'un des 300 fichiers, la méthode update() est appelée 45 millions de fois (prend environ 150s) et la méthode finalize() est appelée 500 000 fois (prend un total de 106s)... pour un total d'environ 250s.

Voici mon code :

def __init__(self):
    self.data = []

def update(self, row):
    self.data.append(row)

def finalize(self):
    dx = np.array(self.data)

D'autres choses que j'ai essayées incluent le code suivant... mais c'est beaaaucoup plus lent.

def classe A :
    def __init__(self):
        self.data = np.array([])

    def update(self, row):
        np.append(self.data, row)

    def finalize(self):
        dx = np.reshape(self.data, shape=(self.data.shape[0]/5, 5))

Voici un schéma de comment cela est appelé :

for i in range(500000):
    ax = A()
    for j in range(200):
         ax.update([1,2,3,4,5])
    ax.finalize()
    # du traitement sur ax

1voto

joaonrb Points 430

Si vous voulez améliorer les performances avec des opérations sur les listes, jetez un œil à la bibliothèque blist. C'est une implémentation optimisée de la liste Python et d'autres structures.

Je ne l'ai pas encore testé, mais les résultats sur leur page semblent prometteurs.

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