Python 如何根据条件在三维阵列中放置中心柱?

Python 如何根据条件在三维阵列中放置中心柱?,python,numpy,numpy-ndarray,numpy-slicing,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.],

给定一个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个Tictatcoe游戏的历史。尺寸如下所示:

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.]]])
a、 形状=(游戏编号、历史状态、状态属性)


因此,我正在尝试收集玩家1轮到的所有游戏。

我使用了你的建议进行切分

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.]]]  

我把你的建议用在切片上了

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.]]]  

抱歉-我指的是索引9,它与第10列相同,因此a[:,:,9]是我希望用于maskI的值。我已经删除了我的评论。现在一切都清楚了。mask=a[range(len(a)),:,9]=-1b=a[range(len(a))][mask]可以收集所有正确的行,但它只是将它们聚在一起,这是不对的。我的意思是索引9,它与列10相同,所以a[:,:,9]是我希望用于maskI的值。我已经删除了我的评论。现在一切都清楚了。mask=a[range(len(a)),:,9]=-1b=a[range(len(a))][mask]可以收集所有正确的行,但它只是将它们聚在一起,这也不正确