python中二维数组计算的有效/正确数据结构问题

2024-07-01 06:48:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难用最有效(即:最快)的方法对2dnumpy数组进行迭代更改,也无法跟踪对该数组所做的更改

在我的特殊问题中,我试图改变2D数组的元素,如下所示:

import numpy as np

a1 = np.array([   [2, 1, 4, 2],
                  [1, 2, 3, 3], 
                  [1, 2, 1, 1],
                  [2, 3, 5, 6]
              ])

new_arrays1 = []

for i in range(0, a1.shape[0]):
    for j in range(0, a1.shape[1] - 1):
        a1_move = np.copy(a1)
        a1_move[i, j], a1_move[i, j + 1] = a1_move[i, j + 1], a1_move[i, j]
        new_arrays1.append(a1_move)

new_arrays2 = []

for a2 in new_arrays1:
    for i in range(0, a2.shape[0]):
        for j in range(0, a2.shape[1] - 1):
            a2_move = np.copy(a2)
            a2_move[i, j], a2_move[i, j + 1] = a2_move[i, j + 1], a2_move[i, j]
            new_arrays2.append(a2_move)

也就是说,我逐个移动2D数组a1每行中所有可能的元素,并创建12(4x4)个新数组。然后,我移动新的12个数组中每一行中所有可能的元素,总共创建12x12=144个新数组

我的问题是:有没有什么数据结构/技术/东西可以让我知道我采取了什么步骤(移动数组)来达到最后的144个数组?我知道对于上面的例子,矩阵new_arrays[0]导致所有矩阵new_arrays2[0:11]。不过,我也想知道为达到new_arrays2[0:11]中的数组所采取的措施

在我的完整代码中,初始数组(a1)是12x6。此外,我需要对矩阵执行两次以上的这些操作,很可能总共执行4-5次(这意味着要分析的矩阵总数为60^4或60^5),这意味着我需要一个有效的解决方案来解决这个问题

我的最终目标是分析最后一步中的所有数组(即上面示例中的第2步),推断出哪个数组是“最佳”的,并使用对初始数组所做的移动来达到代码中的这个“最佳”数组


Tags: ina2元素newformovea1np

热门问题