python.array与numpy.array

如果你在Python中创build一个1d数组,那么使用NumPy包有什么好处?

这一切都取决于你打算如何处理数组。 如果你正在做的是创build简单的数据types的数组,并做I / O, 数组模块将做的很好。

另一方面,如果你想做任何types的数值计算,数组模块不提供任何帮助。 NumPy (和SciPy )为您提供了数组和特殊函数之间的各种操作,这些操作不仅对科学工作有用,而且对于高级image processing或一般情况下需要用大量数据执行高效计算的任何事情都是有用的。

Numpy也更灵活,例如它支持任何types的Python对象的数组,并且如果它们符合数组接口 ,它也能够与你自己的对象“本地”交互。

小引导为谁可能发现这个有用的好处(遵循@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 

输出结果如下:

 %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 

看来array.array稍微快一些,'api'可以节省一些麻烦,但是如果你需要的不仅仅是存储双精度,那么numpy.resize毕竟不是一个错误的select(如果使用正确的话)。