繁体   English   中英

numpy.unique 给出了错误的 output 的集合列表

[英]numpy.unique gives wrong output for list of sets

我有一个由给出的集合列表,

sets1 = [{1},{2},{1}]

当我使用 numpy 的unique在此列表中找到唯一元素时,我得到

np.unique(sets1)
Out[18]: array([{1}, {2}, {1}], dtype=object)

可以看出,结果是错误的,因为在 output 中重复了{1}

当我通过使相似元素相邻来更改输入中的顺序时,这不会发生。

sets2 = [{1},{1},{2}]

np.unique(sets2)
Out[21]: array([{1}, {2}], dtype=object)

为什么会出现这种情况? 还是我做的方式有问题?

这里发生的情况是np.unique function 基于来自 NumPy 的np._unique1d .sort()

现在,对每个集合中仅包含一个 integer 的集合列表进行排序将不会生成一个列表,其中每个集合都按集合中存在的 integer 的值排序。 所以我们将拥有(这不是我们想要的):

sets = [{1},{2},{1}]
sets.sort()
print(sets)

# > [{1},{2},{1}]
# ie. the list has not been "sorted" like we want it to

现在,正如您所指出的,如果集合列表已经按照您想要的方式排序,则np.unique将起作用(因为您会事先对列表进行排序)。

一个特定的解决方案(但请注意,它仅适用于每个包含单个整数的集合列表)将是:

np.unique(sorted(sets, key=lambda x: next(iter(x))))

那是因为 set 是不可散列的类型

{1} is {1} # will give False

您可以使用 python collections.Counter如果您可以将集合转换为如下所示的元组

from collections import Counter
sets1 = [{1},{2},{1}]
Counter([tuple(a) for a in sets1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM