NumPy 与常规 Python 列表相比有哪些优势?

新手上路,请多包涵

NumPy 与常规 Python 列表相比有哪些优势?

我有大约 100 个金融市场系列,我将创建一个 100x100x100 = 100 万个单元格的立方体数组。我将对每个 x 与每个 y 和 z 进行回归(3 变量),以用标准错误填充数组。

我听说对于“大矩阵”,出于性能和可伸缩性的原因,我应该使用 NumPy 而不是 Python 列表。问题是,我知道 Python 列表,它们似乎对我有用。

如果我转向 NumPy,会有什么好处?

如果我有 1000 个系列(即立方体中有 10 亿个浮点单元格)怎么办?

原文由 Thomas Browne 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 481
2 个回答

NumPy 的数组比 Python 列表更紧凑——如您所描述的列表列表,在 Python 中至少需要 20 MB 左右,而单元格中具有单精度浮点数的 NumPy 3D 数组将适合 4 MB。使用 NumPy,读取和写入项目的访问速度也更快。

也许你不太关心一百万个单元,但你肯定会关心十亿个单元——这两种方法都不适合 32 位架构,但对于 64 位构建,NumPy 可以节省 4 GB 左右, 仅 Python 就需要至少大约 12 GB(许多指针的大小加倍)——这是一个更昂贵的硬件!

差异主要是由于“间接性”——Python 列表是指向 Python 对象的指针数组,每个指针至少有 4 个字节加上即使是最小的 Python 对象也有 16 个字节(4 个用于类型指针,4 个用于引用计数,4 个对于价值——内存分配器四舍五入到 16)。 NumPy 数组是统一值的数组——单精度数字每个占用 4 个字节,双精度数字占用 8 个字节。不太灵活,但您要为标准 Python 列表的灵活性付出高昂的代价!

原文由 Alex Martelli 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

原文由 Roberto Bonvallet 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题