Python 如何在3d numpy数组的每列中查找连续1的组数

Python 如何在3d numpy数组的每列中查找连续1的组数,python,Python,例如,我有: [[[1 0 1 0 1 0] [1 1 0 0 1 0] [0 1 1 0 1 0] [0 0 0 0 1 0] [1 0 1 0 1 0] [1 0 0 0 0 0]] [[1 0 1 0 1 0] [1 1 0 0 1 0] [0 1 1 1 1 0] [0 0 0 1 0 0] [1 0 1 1 1 0] [1 1 0 0 1 0]]] 我想要: [[[2 1 3 0

例如,我有:

 [[[1 0 1 0 1 0]
   [1 1 0 0 1 0]
   [0 1 1 0 1 0]
   [0 0 0 0 1 0]
   [1 0 1 0 1 0]
   [1 0 0 0 0 0]]

     [[1 0 1 0 1 0]
      [1 1 0 0 1 0]
      [0 1 1 1 1 0]
      [0 0 0 1 0 0]
      [1 0 1 1 1 0]
      [1 1 0 0 1 0]]]
我想要:

 [[[2 1 3 0 1 0]        
   [[2 2 3 1 2 0]]
当然这是一个缩减,我的numpy数组形状是(1247650,18)。
我知道有一个简单的方法,但我无法找到它。

我们可以使用
np.diff
来获取给定轴上先前值之间的差值:

import numpy as np
np.diff(x, axis = 1)
array([[[ 0,  1, -1,  0,  0,  0],
        [-1,  0,  1,  0,  0,  0],
        [ 0, -1, -1,  0,  0,  0],
        [ 1,  0,  1,  0,  0,  0],
        [ 0,  0, -1,  0, -1,  0]],

       [[ 0,  1, -1,  0,  0,  0],
        [-1,  0,  1,  1,  0,  0],
        [ 0, -1, -1,  0, -1,  0],
        [ 1,  0,  1,  0,  1,  0],
        [ 0,  1, -1, -1,  0,  0]]])
然后我们要计算每一次“切换”到一的次数:因此差值为1

np.sum(np.diff(x, axis = 1) == 1, axis = 1)
array([[1, 1, 2, 0, 0, 0],
       [1, 2, 2, 1, 1, 0]])
但是,这样做我们会错过以1开头的那些列,因此我们可以将它们重新添加,并给出您的答案:

np.sum(np.diff(x, axis = 1) == 1, axis = 1) + x[:,0,:]
array([[2, 1, 3, 0, 1, 0],
       [2, 2, 3, 1, 2, 0]])

你能再详细说明一下预期的产出吗?不确定您是如何找到这些值的。她想知道1在一列中出现了多少次,是作为一组连续的1出现,还是单独出现。