Python中是否有与泛型对象的np.unique等效的函数
可以返回第一次出现的索引、要重建的索引和出现次数。是否有任何函数/库可以对任何Python对象执行相同的操作?您可以使用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']) 并非如此。根据需要,您可以使
计数器
:
> 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)