计算 numpy 数组中一行中重复元素的数量

Mik*_*tov 5 python arrays numpy

我正在寻找一种快速方法来执行以下操作:假设我有一个数组

X = np.array([1,1,1,2,2,2,2,2,3,3,1,1,0,0,0,5])
Run Code Online (Sandbox Code Playgroud)

我不是在寻找元素的简单频率,而是在寻找连续的频率。所以第一个 1 重复 3 次,比 2 重复 5 次,比 3 2 次,等等。所以 iffreq是我的函数比:

Y = freq(X)
Y = np.array([[1,3],[2,5],[3,2],[1,2],[0,3],[5,1]])
Run Code Online (Sandbox Code Playgroud)

例如,我可以用这样的循环来编写:

def freq(X):
    i=0        
    Y=[]
    while i<len(X):
        el = X[i]
        el_count=0
        while X[i]==el:
            el_count +=1
            i+=1
            if i==len(X):
                break            
        Y.append(np.array([el,el_count]))

    return np.array(Y)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更快更好的方法来做到这一点。谢谢!

Chr*_*ler 2

您可以使用itertools.groupby来执行该操作,而无需调用numpy

import itertools

X = [1,1,1,2,2,2,2,2,3,3,1,1,0,0,0,5]

Y = [(x, len(list(y))) for x, y in itertools.groupby(X)]

print(Y)
# [(1, 3), (2, 5), (3, 2), (1, 2), (0, 3), (5, 1)]
Run Code Online (Sandbox Code Playgroud)