为了账号安全,请及时绑定邮箱和手机立即绑定

与常规Python列表相比,NumPy有什么优势?

与常规Python列表相比,NumPy有什么优势?

暮色呼如 2019-06-12 14:59:54
与常规Python列表相比,NumPy有什么优势?.‘>的优点是什么?NumPy在常规Python列表上?我有大约100个金融市场系列,我将创建一个由100x100x100=100万个单元组成的立方体数组。我将回归(3-变量)每个x与每个y和z,以填补数组的标准错误。我听说对于“大型矩阵”,出于性能和可伸缩性的原因,我应该使用NumPy而不是Python列表。问题是,我知道Python列表,它们似乎适合我。如果我搬到NumPy会有什么好处?如果我有1000个系列(即立方体中的10亿个浮点单元)呢?
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

NumPy的数组比Python列表更紧凑-用Python描述的列表至少需要20 MB左右,而单元格中具有单精度浮动的NumPy 3D数组可以容纳4 MB。使用NumPy,读写项目的访问速度也更快。

也许你对一百万个细胞不那么在意,但你肯定会关心十亿个细胞-这两种方法都不适合32位架构,但是64位构建NumPy就不需要4GB左右了,单是Python就至少需要12 GB(很多指针是双倍大小的指针)-这是一个昂贵得多的硬件!

差异主要是由于“间接性”-Python列表是指向Python对象的指针数组,每个指针至少4字节,即使是最小的Python对象(类型指针4字节,引用计数4,值4-内存分配器最多16)。NumPy数组是一个统一值的数组-单精度数字每个需要4个字节,双精度数字,8个字节。灵活性较低,但您需要为标准Python列表的灵活性支付大量费用!


查看完整回答
反对 回复 2019-06-12
?
青春有我

TA贡献1784条经验 获得超8个赞

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也是值得的。


查看完整回答
反对 回复 2019-06-12
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

Alex提到了内存效率,Roberto提到了方便,这些都是好的地方。关于更多的想法,我要提一下速度和功能.


功能:NumPy,FFT,卷积,快速搜索,基本统计,线性代数,直方图等都内置了很多。说真的,没有自由贸易组织,谁能活下去呢?


速度:下面是对一个列表和一个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: 3.004e-05

list:  5.363e-04


查看完整回答
反对 回复 2019-06-12
  • 3 回答
  • 0 关注
  • 2711 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信