python - 在python中高效读取数组

标签 python arrays

我有一个 4 维数组 L。L.shape = [31, 13, 250, 501]

我需要执行使用不同元素的操作。

方法一:

for i1 in range(31):
    for i2 in range(15):
        for i3 in range(250):
            for i4 in range(501):
                L[i1, i2, i3, i4] # some operations involving this element

方法2:

for i2 in range(15):
    for i1 in range(31):
        for i4 in range(501):
            for i3 in range(250):
                L[i1, i2, i3, i4] # some operations involving this element

执行速度是否取决于 for 循环的嵌套方式?

最佳答案

注意模式

for i in range(a):
    for j in range(b):
        #do stuff

涉及调用range()功能a+1次。如果a > b ,这将低于

for j in range(b):
    for i in range(a):
        #do stuff

你可以算出来

for i in range(a):
    for j in range(b):
        for k in range(c):
            for l in range(d):
                #do stuff

调用范围函数1 + a + a*b + a*b*c很多次,当 a <= b <= c <= d 时最小化。在你的例子中,你可以算出最有效和最不有效的循环方式之间的差异(通过范围调用的数量来衡量)大约是 34 倍,这比我最初的预期要高。这并不意味着一种方法会比另一种方法快 34 倍。在典型的代码中,无论您如何管理簿记,最内层循环的主体都会主导执行时间。

说了这么多,切换到NumPy (如果您还没有使用它)可能是使代码快速运行的最佳方法。

关于python - 在python中高效读取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325536/

相关文章:

python - 基于 numpy 的空间缩减

python - 如何在 python 中多次使用 ax.voxels 方法后修复限制

arrays - 点阵算法

javascript - 如何在 jQuery 中推送、弹出和包装值?

php - 在 PHP 中比较多维数组

python - 从 None json.decoder.JSONDecodeError : Expecting value: line 1 column 1 (char 0) 引发 JSONDecodeError ("Expecting value"、 s、err.value)

python - Django syncdb错误

python - 在行中出现某个项目后,更改数据框中的所有行。

c++ - 相当于 C++ 中 vector 的 int[] + k

java - 为列表的一个子部分内的排列创建数组