dF.*_*dF. 64
这一切都取决于你打算用数组做什么.如果你所做的只是创建简单数据类型的数组并进行I/O,那么数组模块就可以了.
另一方面,如果您想进行任何类型的数值计算,阵列模块不会提供任何帮助.NumPy(和SciPy)为您提供了阵列和特殊功能之间的各种操作,这些操作不仅适用于科学工作,而且适用于高级图像处理或一般需要使用大量数据执行高效计算的任何操作.
Numpy也更灵活,例如它支持任何类型的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
Run Code Online (Sandbox Code Playgroud)
输出给出:
%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
Run Code Online (Sandbox Code Playgroud)
看起来 array.array 稍微快一些,并且“api”为您节省了一些麻烦,但是如果您需要的不仅仅是存储双精度数,那么 numpy.resize 毕竟不是一个糟糕的选择(如果使用正确)。