python - 关于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 步)中分析所有数组,推断出哪个数组是“最佳”的,并使用对初始数组所做的移动来达到这个“最佳”数组在我的代码中。
解决方案
推荐阅读
- css - webpack 4:将 css 文件捆绑到一个 main.css(和一个 main.min.css)
- ruby - Chef Ruby - 获取目录名称并将其存储在数组中?
- javascript - Angular 5 - 仅转换 FirebaseListObservable 中的数组
- java - 如何通过 JSON API 实现复杂的条件批量部分更新?
- vuejs2 - httpvueloader 所有子级挂载
- c# - 如何从 Android Xamarin.Forms 的 ShouldOverrideUrlLoading 中终止操作
- c - MacOS 上的 OpenMP 屏障实现
- batch-file - 如何使用 RoboCopy 处理网络错误
- c# - 删除变音符号,某些字母上的某些变音符号除外
- python - 多处理 python 的行为不符合预期