python - 有没有一种有效的方法可以将多维字典转换为 python 中的列表?
问题描述
我正在尝试教神经网络如何在 Keras 中玩 Noughts 和 Crosses,但我的效率存在问题。我做了一些计时,发现这条线占用了 80% 的时间:
value, logits = neural_net.predict(numpy.array([game.make_image()]))
运行缓慢有两个可能的原因:
- 预测功能需要很长时间。
- game.make_image() 函数效率很低。
由于我无法控制 Keras 的 predict 函数的速度,我决定查看 make_image 函数,它采用游戏的棋盘(出于效率原因,在 3D 字典中为每个玩家表示一个位棋盘),并根据到当前玩家并添加一个 3x3 的棋盘来表示它是哪个玩家,同时将其变成一个列表,以便可以将其输入到网络中。
这是代码:
def make_image(self):
return [[[self.board[self.to_play][key][key2] for key2 in self.board[self.to_play][key]]
for key in self.board[self.to_play]],
[[self.board[1 - self.to_play][key][key2] for key2 in self.board[1 - self.to_play][key]]
for key in self.board[1 - self.to_play]],
[[self.to_play for key2 in self.board[0][key]] for key in self.board[0]]]
有什么方法可以提高效率,还是预测函数花费的时间主要是多少?
注意:to_play 变量为 0 或 1,其中 0 是第一个玩的玩家,1 是第二个玩的玩家。
编辑:通常会播放的示例板:
O|X|
|O|X
X|O|X
该板在字典中的表示:
{
0: {0: {0: 0, 1: 1, 2: 0},
1: {0: 0, 1: 0, 2: 1},
2: {0: 1, 1: 0, 2: 1}}
1: {0: {0: 1, 1: 0, 2: 0},
1: {0: 0, 1: 1, 2: 0},
2: {0: 0, 1: 1, 2: 0}}
}
数组中想要的表示:
[
[[0, 1, 0],
[0, 0, 1],
[1, 0, 1]],
[[1, 0, 0],
[0, 1, 0],
[0, 1, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
]
解决方案
推荐阅读
- python - 在 Python 中拆分 URL
- flutter - 在启用 null 安全性的情况下,如何在 Iterable.firstWhere 中从 orElse 返回 null?
- php - Jenkins + AWS 代理 = 仅在 php-project 的工作中出错,Java-projects 的工作正常:/var/run/docker.sock:connect:permission denied
- linux - 根据特定条件粘贴数据
- java - 在 Selenium 中处理帧时没有取回 TItle
- java - Java 扫描器输入循环在第一次循环后抛出 No such Element 异常
- python - 如何区分pygame中键是按住还是按下?
- javascript - 如何以功能性只读方式添加两个对象的所有属性?
- c# - Process.start 以应用程序和文件名作为变量
- r - “A”=“a”、“B”=“b”等形式的表达式如何从 LETTERS 和字母自动构造?