Python中是否有与泛型对象的np.unique等效的函数

Python中是否有与泛型对象的np.unique等效的函数,python,algorithm,numpy,unique,Python,Algorithm,Numpy,Unique,可以返回第一次出现的索引、要重建的索引和出现次数。是否有任何函数/库可以对任何Python对象执行相同的操作?您可以使用计数器: > from collections import Counter > bob = ['bob','bob','dob'] > Counter(bob) Counter({'bob': 2, 'dob': 1}) > Counter(bob).keys() dict_keys(['bob', 'dob']) 并非如此。根据需要,您可以使

可以返回第一次出现的索引、要重建的索引和出现次数。是否有任何函数/库可以对任何Python对象执行相同的操作?

您可以使用
计数器

> from collections import Counter

> bob = ['bob','bob','dob']
> Counter(bob)
Counter({'bob': 2, 'dob': 1})

> Counter(bob).keys()
dict_keys(['bob', 'dob'])


并非如此。根据需要,您可以使用不同的类获得类似的功能

unique
不带额外标志,其结果与:

模拟返回计数:

counts = collections.Counter(x)
unique_values = list(counts.keys())
unique_counts = list(counts.values())
要模拟
返回索引
,请在
集合
计数器
上使用。这假定容器是一个列表

first_indices = [x.index(k) for k in counts]
为了模拟
return\u inverse
,我们来看看
unique
是如何实际实现的
unique
对输入进行排序以获得元素的运行。类似技术可通过(或就地)和以下方式实现:

实际上,
groupby
方法对所有选项进行编码:

s = sorted(zip(x, itertools.count()))
unique_values = []
first_indices = []
unique_counts = []
inverse = [0] * len(x)
for i, (k, g) in enumerate(itertools.groupby(s, operator.itemgetter(0))):
    unique_values.append(k)
    count = 1
    v = next(g)
    inverse[v[1]] = i
    first_indices.append(v[0])
    for v in g:
        inverse[v[1]] = i
        count += 1
    unique_counts.append(count)

你是说任何可移植的python对象?或者对于包含任何python对象的iterable?@Yonlif对于任何iterable对象,或者至少是list。这只是op正在寻找的功能的子集
s = sorted(zip(x, itertools.count()))
inverse = [0] * len(x)
for i, (k, g) in enumerate(itertools.groupby(s, operator.itemgetter(0))):
    for v in g:
        inverse[v[1]] = i
s = sorted(zip(x, itertools.count()))
unique_values = []
first_indices = []
unique_counts = []
inverse = [0] * len(x)
for i, (k, g) in enumerate(itertools.groupby(s, operator.itemgetter(0))):
    unique_values.append(k)
    count = 1
    v = next(g)
    inverse[v[1]] = i
    first_indices.append(v[0])
    for v in g:
        inverse[v[1]] = i
        count += 1
    unique_counts.append(count)