我要找的是一个函数;a";将返回";b";通过以下方式:
a = numpy.array([1, 1, 1, 1, 5, 5, 5, 5, 5, 6, 5, 2, 2, 2, 2])
第一次1连续显示4次,之后5次显示5次,6次显示1次,5次显示1,2次显示4次
返回的是这样一个数组:
b = numpy.array([4, 5, 1, 1, 4])
im查找的函数将以这种方式处理5,即使5在数组"中;a";总共6次,每个序列将单独计数
这是一个非常具体的函数,我写了一个这样的函数,但我想知道numpy中是否有这样的内置函数来快速性能
提前感谢
这可以用非零diff:的cumsum
上的bincount
来完成
out = np.bincount((np.diff(a)!=0).cumsum())
out[0] += 1
输出:
array([4, 5, 1, 1, 4])
您还可以使用np.diff
的附加属性来创建一个差异数组,其中两端都有人为添加的额外单位:
>>> np.diff(a,prepend=a[0]-1,append=a[-1]+1)
array([ 1, 0, 0, 0, 4, 0, 0, 0, 0, 1, -1, -3, 0, 0, 0, 1])
现在可以进行np.diff
和np.nonzero
:的组合了
x = np.diff(a, prepend=a[0]-1, append=a[-1]+1)
np.diff(np.nonzero(x))
输出:
array([[4, 5, 1, 1, 4]], dtype=int32)
但这有点慢:小阵列a
慢3倍,大阵列a = np.random.randint(3,size=10000000)
慢25%。