有没有一种有效的方法可以将多维字典转换为python中的列表?

时间:2020-08-22 20:19:26

标签: python list dictionary

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

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

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

  1. 预测功能日渐成熟。
  2. game.make_image()函数的效率非常低。

由于我无法控制Keras的预测函数的速度,因此我决定看一下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]]
]

0 个答案:

没有答案