python - 在 Python 中复制二维数组的最快方法是什么?

标签 python arrays performance copy

我必须在 R*C 网格上进行大量模拟。

这些模拟正在改变网格,所以我需要在每个之前复制我的引用网格,然后在新的新网格上应用我的模拟函数。

在 Python 中执行此操作的最快方法是什么?


因为我没有在 StackOverflow 上找到类似的问题,所以我自己做了测试并决定将它们张贴在这里认为它们可能对其他人有用。

答案将是社区响应,以便其他人可以使用可能的其他技术添加新的测量。

如果添加其他方法,请记住测量所有旧测试并更新它们,因为时间取决于所使用的计算机,避免结果出现偏差。

最佳答案

我使用了一个 bash 变量来设置 timeit测试:

setup="""
R = 100
C = 100
from copy import deepcopy
import numpy as np
ref = [[i for i in range(C)] for _ in range(R)]
ref_np = np.array(ref)
cp = [[100 for i in range(C)] for _ in range(R)]
cp_np = np.array(cp)
"""

为了方便,我还设置了一个临时别名pybench:

alias pybench='python3.5 -m timeit -s "$setup" $1'

python 3

Python 3.5.0+(默认,2015 年 10 月 11 日,09:05:38)

  • 深拷贝:

    >>> pybench "cp = deepcopy(ref)"
    100 loops, best of 3: 8.29 msec per loop
    
  • 使用索引修改预先创建的数组:

    >>> pybench \
    "for y in range(R):
        for x in range(C):
            cp[y][x] = ref[y][x]"
    1000 loops, best of 3: 1.16 msec per loop
    
  • 嵌套列表理解:

    >>> pybench "cp = [[x for x in row] for row in ref]"
    1000 loops, best of 3: 390 usec per loop
    
  • 切片:

    >>> pybench "cp = [row[:] for row in ref]"
    10000 loops, best of 3: 45.8 usec per loop
    
  • NumPy 副本:

    >>> pybench "cp_np = np.copy(ref_np)"
    100000 loops, best of 3: 6.03 usec per loop
    
  • 复制到预先创建的 NumPy 数组:

    >>> pybench "np.copyto(cp_np, ref_np)"
    100000 loops, best of 3: 4.52 usec per loop
    

这些结果并不令人惊讶,正如您可能已经猜到的那样,使用 NumPy 的速度要快得多,尤其是在避免每次都创建新表的情况下。

关于python - 在 Python 中复制二维数组的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36968157/

相关文章:

javascript - 返回长度为 5 的空白数组

c# - .NET 中属性的性能开销

java - 将其用于多个文本时加速 OpenNLP POS 标记

python - 通过递归函数将文件夹、子文件夹和文件从Python中的一个路径复制到另一个路径

python - 本地使用 dask : to Client() or not to Client()?

java - 从其他数组中提取二维数组

PHP:PLIST/XML 与 MySQL 的性能对比?

python - Python 中的 plt.contour

python - 尽管具有相同的列,但 xgboost 中的 feature_names 不匹配

php - 如何将 RGB(A) 值保存在数组中?