functions - python.array versus numpy.array
numpy python 3.6 windows (2)
Pequeño arranque en beneficio de quien pueda encontrarlo útil (siguiendo la excelente respuesta 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 salida da:
%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
Parece que array.array es un poco más rápido y la ''api'' te ahorra algunas molestias, pero si necesitas algo más que almacenar dobles, numpy.resize no es una mala elección después de todo (si se usa correctamente).
Si está creando una matriz de 1d en Python, ¿hay algún beneficio al usar el paquete NumPy?
Todo depende de lo que planeas hacer con la matriz. Si todo lo que hace es crear matrices de tipos de datos simples y hacer E / S, el módulo de array perfectamente.
Si, por otro lado, desea hacer cualquier tipo de cálculos numéricos, el módulo de matriz no proporciona ninguna ayuda con eso. NumPy (y SciPy ) le ofrecen una amplia variedad de operaciones entre arreglos y funciones especiales que son útiles no solo para trabajos científicos, sino también para la manipulación avanzada de imágenes o, en general, para realizar cálculos eficientes con grandes cantidades de datos.
Numpy también es mucho más flexible, por ejemplo, admite matrices de cualquier tipo de objetos de Python, y también puede interactuar "de forma nativa" con sus propios objetos si se ajustan a la interfaz de la matriz .