gpt4 book ai didi

python - 与 numpy 对象数组相比,列表列表在速度方面有哪些优点/缺点?

转载 作者:行者123 更新时间:2023-12-01 04:58:50 25 4
gpt4 key购买 nike

这是这个问题的后续

What are the benefits / drawbacks of a list of lists compared to a numpy array of OBJECTS with regards to MEMORY?

我有兴趣了解当数组为 object 类型时使用 numpy 数组与列表列表的速度影响。

如果有人对我正在使用的对象感兴趣:

import gmpy2 as gm
gm.mpfr('0') # <-- this is the object

最佳答案

就速度而言,numpy 最大的常见好处来自于能够向量化操作,这意味着您可以将围绕 Python 函数调用的 Python 循环替换为围绕某些内联 C(甚至自定义 SIMD 程序集)的 C 循环) 代码。 mpfr 对象数组可能没有内置矢量化操作,因此主要好处消失了。

但是,您仍然可以在某些方面受益:

  • 一些在纯 Python 中需要复制的操作在 numpy 中基本上是免费的 - 转置 2D 数组、切片列或行,甚至 reshape 维度都是通过使用不同的步幅包装指向相同基础数据的指针来完成的信息。由于您最初的问题专门询问了 A.T,是的,这基本上是免费的。
  • 许多操作在 numpy 中比在 Python 中更容易就地执行,这可以为您节省更多副本。
  • 即使需要副本,批量复制大内存数组然后对所有对象进行引用计数也比迭代嵌套列表并一直向下深度复制它们要快。
  • 使用 numpy 编写自己的自定义 Cython 代码来矢量化任意操作比使用 Python 容易得多。
  • 您仍然可以通过使用 np.vectorize 获得一些好处围绕普通的 Python 函数,几乎与从列表理解相对于 for 语句获得的好处相同。
  • 在一定的大小范围内,如果您小心地使用适当的跨步,numpy 可以让您相对轻松地优化缓存局部性(或较大大小的虚拟机交换),而实际上根本没有办法做到这一点列表的列表。当您处理指向可能分散在内存中的对象的指针数组时,这比处理可以直接嵌入到数组中的值要小得多,但它仍然是一些东西。

至于缺点……嗯,一个明显的缺点是使用 numpy 会限制你只能使用 CPython 或者有时使用 PyPy(希望将来“有时”会变成“几乎总是”,但截至 2014 年还没有完全实现);如果您的代码在 Jython 或 IronPython 或非 NumPyPy PyPy 中运行得更快,这可能是坚持使用列表的一个很好的理由。

关于python - 与 numpy 对象数组相比,列表列表在速度方面有哪些优点/缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com