如何将numpy数组中的相同元素移动到子数组中

the*_*ist 5 python numpy python-itertools

如何有效地将已排序的numpy数组中的相同元素移动到子数组中?

从这里:

import numpy as np     
a=np.array([0,0,1,1,1,3,5,5,5])
Run Code Online (Sandbox Code Playgroud)

到这里:

a2=array([[0, 0], [1, 1, 1], [3], [5, 5, 5]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 3

一种方法是获取数字发生变化的移位位置,并使用这些索引将输入数组拆分为子数组。为了找到这些索引,您可以使用np.nonzero微分数组,然后用于np.split拆分,如下所示 -

np.split(a,np.nonzero(np.diff(a))[0]+1)
Run Code Online (Sandbox Code Playgroud)

样本运行 -

In [42]: a
Out[42]: array([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6])

In [43]: np.split(a,np.nonzero(np.diff(a))[0]+1)
Out[43]: 
[array([2, 2, 2, 2]),
 array([3, 3, 3, 3]),
 array([4, 4, 4, 4, 4, 4, 4]),
 array([5, 5]),
 array([6, 6, 6])]
Run Code Online (Sandbox Code Playgroud)