gpt4 book ai didi

python - numpy.unique 给出了集合列表的错误输出

转载 作者:行者123 更新时间:2023-12-05 06:54:08 25 4
gpt4 key购买 nike

我有一个集合列表,由

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

当我使用 numpy 的 unique 找到这个列表中的唯一元素时,我得到了

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

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

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

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

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

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

最佳答案

这里发生的是 np.unique 函数基于 NumPy 的 np._unique1d 函数(参见代码 here ),它本身使用.sort() 方法。

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

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))))

关于python - numpy.unique 给出了集合列表的错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65611301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com