python函数,特别是numpy,它返回一个数组,其中包含一行中某个项的重复次数



我要找的是一个函数;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.diffnp.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%。

相关内容

最新更新