python.array与numpy.array

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

2 Solutions collect form web for “python.array与numpy.array”

这一切都取决于你打算如何处理数组。 如果你正在做的是创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(如果使用正确的话)。

  • 在Python脚本运行之间保持内存中的持久variables
  • 如何在Python中使用for循环查找数组中的重复元素?
  • Python PIL:如何将PNG图像写入string
  • “is None”和“== None”之间的区别是什么?
  • “安装mysql-python时,无法打开包含文件:'config-win.h':没有这样的文件或目录”
  • 检查Python中的path是否有效,而不在path的目标处创build文件
  • 我应该把#! (shebang)在Python脚本中,它应该采取什么forms?
  • 如何检查variables是否存在?
  • 使用Glob()在Python中recursion地查找文件?
  • 发电机理解究竟如何工作?
  • 在pandas中混洗/置换DataFrame