Question

Si vous créez un tableau 1d en Python, l'utilisation du package NumPy présente-t-elle un avantage?

Était-ce utile?

La solution

Tout dépend de ce que vous prévoyez de faire avec le tableau. Si vous ne faites que créer des tableaux de types de données simples et faire des E / S, le tableau le module fera l'affaire.

Si, par contre, vous souhaitez effectuer tout type de calcul numérique, le module tableau ne fournit aucune aide à cet égard. NumPy (et SciPy ) vous offre une grande variété d’opérations entre des tableaux et des fonctions spéciales utiles non seulement pour les travaux scientifiques, mais également pour des tâches telles que la manipulation avancée d’images ou tout élément nécessitant des calculs efficaces avec de grandes quantités de données.

Numpy est également beaucoup plus flexible, par exemple. il supporte les tableaux de tout type d’objets Python, et est également capable d’interagir de manière "native". avec vos propres objets s’ils sont conformes à la interface de tableau .

Autres conseils

Petit démarrage pour le bénéfice de quiconque pourrait trouver cela utile (après l'excellente réponse de @dF.):

import numpy as np
from array import array

# Fixed size numpy array
def np_fixed(n):
    q = np.empty(n)
    for i in range(n):
        q[i] = i
    return q

# Resize with np.resize
def np_class_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q = np.resize(q, q.shape[0]*2)        
        q[i] = i
    return q    

# Resize with the numpy.array method
def np_method_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q.resize(q.shape[0]*2)
        q[i] = i
    return q

# Array.array append
def arr(n):
    q = array('d')
    for i in range(n):
        q.append(i)
    return q

isize = 1000
n = 10000000

La sortie donne:

%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)

1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop

Il semble que array.array soit légèrement plus rapide et "api" vous évite quelques tracas, mais si vous avez besoin de plus que simplement stocker des doublons, alors numpy.resize n'est pas un mauvais choix après tout (s'il est utilisé correctement).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top