1、占用空间和读取速度
NumPy数组是更紧凑的Python列表,列表的列表描述同样的数据,在Python中,可能至少需要20 MB左右,而单元格中具有单精度浮点数的NumPy 3D数组可以容纳4MB。读写数据NumPy也更快。
一个Python列表是一个Python对象的指针数组,至少4个字节指针+ 16字节甚至最小的Python对象。NumPy数组是一个统一值的数组——单精度数字每个4字节,双精度数字每个8字节。不太灵活,但是标准Python列表的灵活性会占用更大的内存空间。
2、使用NumPy处理数据更方便
NumPy不仅更高效,而且也更方便。可以容易得到很多向量和矩阵运算。
例如,
可以直接将多维数据集从文件读入array
import numpy x = numpy.fromfile(file=open("data"), dtype=float).reshape((100, 100, 100)) # 可以按第二维度求和: s = x.sum(axis=1) # 找出高于阈值的数据: (x > 0.5).nonzero() # 删除第三维上的每个偶数索引片: x[:, :, ::2]
注意:许多有用的库都适用于 NumPy 数组。例如,统计分析和可视化库。即使你没有性能问题,学习 NumPy是很有用的。
3、list列表和 NumPy数组速度测试
列表和 NumPy 数组进行求和的测试,表明 NumPy 数组上的求和速度快 10 倍,
例如,
from numpy import arange
from timeit import Timer
Nelements = 10000
Ntimeits = 10000
x = arange(Nelements)
y = range(Nelements)
t_numpy = Timer("x.sum()", "from __main__ import x")
t_list = Timer("sum(y)", "from __main__ import y")
print("numpy: %.3e" % (t_numpy.timeit(Ntimeits)/Ntimeits,))
print("list: %.3e" % (t_list.timeit(Ntimeits)/Ntimeits,))
输出结果:
numpy: 7.599e-06
list: 6.382e-05
4、使用区别
1)与 Python 列表(可以动态增长)不同,Numpy 数组在创建时具有固定大小。更改 ndarray 的大小将创建一个新数组并删除原始数组。
2)NumPy 数组中的元素都需要具有相同的数据类型(我们也可以使用异构类型,但这将不允许进行数学运算),因此内存中的大小相同。
3)NumPy 数组有助于对大量数据进行数学运算和其他类型的运算。通常,与使用 Python list列表等相比,此类操作的执行效率更高,代码更少。