3x3矩阵numpy中每行,列和对角线的总和

时间:2014-11-04 02:49:32

标签: python numpy matrix indexing pygame

我的任务是使用pygame和numpy的Tic-Tac_Toe。我几乎完成了所有程序。我只需要帮助了解如何找到胜利者。如果任何行,列或对角线的总和等于3,我会找到胜利者。

我有两个3x3矩阵填充0' s。我们称之为xPlayer和oPlayer。每当玩家x或玩家在某个位置选择他们的选择时,矩阵就会被填充1。因此,如果玩家x选择[0,0],则[0,0]处的矩阵位置获得1值。这应该持续到任何行,列或对角线的总和为3.如果两个矩阵中的所有位置都是1,那么就没有赢家。

我需要帮助找到胜利者。我对python很陌生,所以我不太了解矩阵索引。任何帮助将不胜感激!

编辑:基本上,你如何找出每行,每列和对角线的总和来检查它们中的任何一个是否等于3.

2 个答案:

答案 0 :(得分:2)

要在numpy中索引矩阵,只需使用符号A [y,x]引用矩阵A的行y和列x。如果要一次从矩阵中选择多个值,可以使用标准python列表切片。例如,要选择A的最左列,您将使用A [:,0]。

在您的情况下,找到您可以执行的列的总和

sum(xPlayer[:,0])

计算xPlayer最左边一列和

的总和
sum(xPlayer[0,:])

表示xPlayer的第一行。在对角线的情况下,您只需要手动添加数组条目,因此其中一个对角线将是:

xPlayer[0,0]+xPlayer[1,1]+xPlayer[2,2]

或者,您可以使用numpy函数计算

行和列的总和
xPlayer.sum(0)

计算每列中行数之和

xPlayer.sum(1)

计算每行中各列的总和。你甚至可以在不手动指定索引的情况下计算对角线,所以

sum(xPlayer.diagonal())

表示左上角 - 右上角和

sum(numpy.fliplr(xPlayer).diagonal())

为另一个对角线。

编辑:澄清一下,这适用于"数组"在numpy。所有上述陈述仍可用于"矩阵"通过

将矩阵转换为数组
arr = numpy.array(mat)

或适当地使用得到的矩阵。请注意,在后一种情况下,矩阵对于所有操作都不具有相同的形状。

答案 1 :(得分:-2)

如果有人赢了,

设置一个bool来检查每个回合。如果它返回true,那么无论转向它还是赢了

所以,例如,它是x转,他打出胜利的举动,bool检查是否有人赢了,返回true,打印出来(玩家轮到它)赢了!并结束游戏。