首页 > 解决方案 > 关于python中二维数组计算的有效/正确数据结构的问题

问题描述

我无法围绕最有效(阅读:最快)的方法来迭代地对 2D numpy 数组进行更改,以及能够跟踪对此数组所做的更改。

在我的特定问题中,我正在尝试像这样更改二维数组的元素:

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 步)中分析所有数组,推断出哪个数组是“最佳”的,并使用对初始数组所做的移动来达到这个“最佳”数组在我的代码中。

标签: pythonnumpydata-structures

解决方案


推荐阅读