Python 获取numpy数组列表中的唯一值

Python 获取numpy数组列表中的唯一值,python,arrays,numpy,Python,Arrays,Numpy,我有一个由数组组成的列表。都有形状2 最小示例:mylist=[np.array[1,2],np.array[1,2],np.array[3,4]] 我想得到一个独特的列表,例如。 [np.数组[1,2],np.数组[3,4]] 或者甚至更好,一个带有计数的dict,例如{np.array[1,2]:2,np.array[3,4]:1} 到目前为止,我尝试了listsetmylist,但错误是TypeError:Unhabable类型:“numpy.ndarray”正如错误所示,numpy数组是

我有一个由数组组成的列表。都有形状2

最小示例:mylist=[np.array[1,2],np.array[1,2],np.array[3,4]]

我想得到一个独特的列表,例如。 [np.数组[1,2],np.数组[3,4]]

或者甚至更好,一个带有计数的dict,例如{np.array[1,2]:2,np.array[3,4]:1}


到目前为止,我尝试了listsetmylist,但错误是TypeError:Unhabable类型:“numpy.ndarray”

正如错误所示,numpy数组是不可散列的。您可以将它们转换为元组,元组是可散列的,并根据结果构建:

from collections import Counter

Counter(map(tuple,mylist))
# Counter({(1, 2): 2, (3, 4): 1})
如果需要唯一元组列表,可以构造一个集合:


如错误所示,NumPy数组是不可散列的。您可以将它们转换为元组,元组是可散列的,并根据结果构建:

from collections import Counter

Counter(map(tuple,mylist))
# Counter({(1, 2): 2, (3, 4): 1})
如果需要唯一元组列表,可以构造一个集合:

使用以下命令:

import numpy as np
mylist = [np.array([1,2]),np.array([1,2]),np.array([3,4])]
np.unique(mylist, axis=0)
这将给出uniques数组的列表

array([[1, 2],
       [3, 4]])
来源:

请使用以下内容:

import numpy as np
mylist = [np.array([1,2]),np.array([1,2]),np.array([3,4])]
np.unique(mylist, axis=0)
这将给出uniques数组的列表

array([[1, 2],
       [3, 4]])
资料来源:

纯努比方法:

numpy.unique(mylist, axis=0)
这将生成一个二维阵列,其中包含行中的唯一阵列:

numpy.array([
 [1 2],
 [3 4]])
如果所有数组都具有与示例中相同的长度,则可以使用。 此解决方案可能会很有用,具体取决于您在代码前面所做的工作:也许您根本不需要使用纯Python,而是使用numpy,因为numpy应该更快。

纯numpy方法:

numpy.unique(mylist, axis=0)
这将生成一个二维阵列,其中包含行中的唯一阵列:

numpy.array([
 [1 2],
 [3 4]])
如果所有数组都具有与示例中相同的长度,则可以使用。
此解决方案可能会很有用,具体取决于您在代码前面所做的工作:也许您根本不需要使用普通Python,而是使用numpy,因为numpy应该更快。

一般来说,最好的选择是使用带有自定义参数的np.unique方法

u、 idx,计数=np.uniqueX,轴=0,返回索引=True,返回计数=True

然后,根据:

u是唯一数组的数组 idx是给出唯一值的X的索引 counts是每个唯一项在X中出现的次数 如果您需要字典,则无法在其键中存储哈希值,因此您可能希望将它们存储为元组,如@yatu的答案中所示,或类似以下内容:


dictzip[tuplen表示u中的n],计数

通常,最好的选择是使用带有自定义参数的np.unique方法

u、 idx,计数=np.uniqueX,轴=0,返回索引=True,返回计数=True

然后,根据:

u是唯一数组的数组 idx是给出唯一值的X的索引 counts是每个唯一项在X中出现的次数 如果您需要字典,则无法在其键中存储哈希值,因此您可能希望将它们存储为元组,如@yatu的答案中所示,或类似以下内容:


dictzip[tuplen for n in u],counts

您可能需要提到,这将从列表内部构造2d数组,如果其中一个内部数组具有不同的长度,这将失败您可能需要提到,这将从列表内部构造2d数组,如果其中一个内部数组的长度不同,则会失败。这个答案也不错,但我接受了另一个,因为这是我最后决定使用的。如果有一个形状相同的数组列表,请从中构造一个数组,以便可以利用numpy的函数。np.arraymylist,因此具有更好的性能。由于您在问题中发布了一个列表,我假设内部数组的形状可能不同@cddt谢谢您的全面回答。你是对的,我应该将列表转换为数组。这个答案也不错,但我接受了另一个答案,因为这是我最后决定使用的。如果你有一个形状相同的数组列表,请从中构造一个数组,这样你就可以利用numpy的函数。np.arraymylist,因此具有更好的性能。由于您在问题中发布了一个列表,我假设内部数组的形状可能不同@cddt谢谢您的全面回答。你是对的,我应该把列表转换成数组。