例如,我有这个:
[[[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数组形状为(124,7650,18)。 我知道有一个简单的方法,但是我找不到它。
答案 0 :(得分:3)
我们可以使用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时计数:因此差异为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]])