簡體   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