首页 > 解决方案 > 有没有一种有效的方法可以将多维字典转换为 python 中的列表?

问题描述

我正在尝试教神经网络如何在 Keras 中玩 Noughts 和 Crosses,但我的效率存在问题。我做了一些计时,发现这条线占用了 80% 的时间:

value, logits = neural_net.predict(numpy.array([game.make_image()]))

运行缓慢有两个可能的原因:

  1. 预测功能需要很长时间。
  2. 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]]
]

标签: pythonlistdictionary

解决方案


推荐阅读