用Python复制2D数组最快的方法是什么? [英] What is the fastest way to copy a 2D array in Python?

查看:212
本文介绍了用Python复制2D数组最快的方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have to make a very large number of simulations on a R*C grid.

这些模拟正在更改网格,因此我需要先复制参考网格,然后将仿真功能应用于全新的网格。

These simulations are altering the grid, so I need to copy my reference grid before each, and then apply my simulating function on the fresh new grid.

最快的方法是

由于我在StackOverflow上没有找到类似的问题,因此我自己进行了测试决定将其发布在这里,认为它们可能对其他人有用。

答案将是社区的回应,以便其他人可以添加新的

如果您添加其他方法,请记住要测量所有旧测试并进行更新,因为时间取决于

推荐答案

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

I used a bash variable for setting up the timeit tests:

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

Just for convenience, I also set a temporary alias pybench:

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






Python 3



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


  • Deepcopy:

>>> 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的速度非常快,尤其是如果有人避免每次都创建新表。

    There is nothing very surprising in these results, as you might have guessed, use NumPy is enormously faster, especially if one avoids creating a new table each time.

    这篇关于用Python复制2D数组最快的方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆