如何根据条件将中心列拖放到3d数组中?

时间:2019-12-13 07:14:35

标签: python numpy numpy-ndarray numpy-slicing

给出一个3d数组:

a = np.array(
        [[[-1., 0., 0., 1., -1., 0., 0., 1., -1., 1., 0., 0., -1., 1.],
           [0., 0., 0., 1., -1., 0., 0., 1., -1., -1., 0., 1., 0., 0.],
           [0., 0., 0., 1., -1., 0., 0., 0., -1., 1., 7., 0., 0., 0.],
           [0., 0., 0., 1., -1., 0., 0., 0., 0., -1., 8., 0., 0., 0.],
           [0., 0., 0., 0., -1., 0., 0., 0., 0., 1., 3., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., 0., 0., 0., -1., 4., 0., 0., 0.]],

          [[1., 0., -1., 0., -1., 1., -1., 0., 0., 1., 0., 0., -1., 1.],
           [1., 0., -1., 0., 0., 1., -1., 0., 0., -1., 4., 1., 0., 0.],
           [0., 0., -1., 0., 0., 1., -1., 0., 0., 1., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0., 1., -1., 0., 0., -1., 2., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., -1., 0., 0., 1., 5., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., 0., 0., 0., -1., 6., 0., 0., 0.]],

          [[0., -1., 1., 0., -1., 1., 0., -1., 0., 1., 0., 0., -1., 1.],
           [0., -1., 1., 0., 0., 1., 0., -1., 0., -1., 4., 1., 0., 0.],
           [0., -1., 0., 0., 0., 1., 0., -1., 0., 1., 2., 0., 0., 0.],
           [0., 0., 0., 0., 0., 1., 0., -1., 0., -1., 1., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., 0., -1., 0., 1., 5., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., 0., 0., 0., -1., 7., 0., 0., 0.]]])

我要删除第9个“列”不为-1的地方 结果将如下所示:

a = np.array(
    [[[0., 0., 0., 1., -1., 0., 0., 1., -1., -1., 0., 1., 0., 0.],
       [0., 0., 0., 1., -1., 0., 0., 0., 0., -1., 8., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., -1., 4., 0., 0., 0.]],

      [[1., 0., -1., 0., 0., 1., -1., 0., 0., -1., 4., 1., 0., 0.],
       [0., 0., 0., 0., 0., 1., -1., 0., 0., -1., 2., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., -1., 6., 0., 0., 0.]],

      [[0., -1., 1., 0., 0., 1., 0., -1., 0., -1., 4., 1., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., -1., 0., -1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., -1., 7., 0., 0., 0.]]])

上下文:这是3个tictactoe游戏的历史。尺寸如下:

a.shape =(游戏编号,历史状态,状态属性)

所以我试图收集-1号玩家回合的所有游戏。

1 个答案:

答案 0 :(得分:2)

我用你的建议切片了

player = a[:,:,9]
wanted != 1
wanted = wanted[:3] #three games

games = np.array(np.array_split(a[wanted],3))

print(games)

[[[ 0.  0.  0.  1. -1.  0.  0.  1. -1. -1.  0.  1.  0.  0.]
[ 0.  0.  0.  1. -1.  0.  0.  0.  0. -1.  8.  0.  0.  0.]
[ 0.  0.  0.  0.  0.  0.  0.  0.  0. -1.  4.  0.  0.  0.]]

[[ 1.  0. -1.  0.  0.  1. -1.  0.  0. -1.  4.  1.  0.  0.]
[ 0.  0.  0.  0.  0.  1. -1.  0.  0. -1.  2.  0.  0.  0.]
[ 0.  0.  0.  0.  0.  0.  0.  0.  0. -1.  6.  0.  0.  0.]]

[[ 0. -1.  1.  0.  0.  1.  0. -1.  0. -1.  4.  1.  0.  0.]
[ 0.  0.  0.  0.  0.  1.  0. -1.  0. -1.  1.  0.  0.  0.]
[ 0.  0.  0.  0.  0.  0.  0.  0.  0. -1.  7.  0.  0.  0.]]]