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出现,还是单独出现。