我用了:
df['ids'] = df['ids'].values.astype(set)
Run Code Online (Sandbox Code Playgroud)
转lists成sets,但输出是一个列表不是一组:
>>> x = np.array([[1, 2, 2.5],[12,35,12]])
>>> x.astype(set)
array([[1.0, 2.0, 2.5],
[12.0, 35.0, 12.0]], dtype=object)
Run Code Online (Sandbox Code Playgroud)
有没有一种有效的方法可以将列表转换为in Numpy?
编辑1:
我的输入如下:
我有3,000条记录。每个都有30,000个ID:[[1,...,12,13,...,30000],[1,..,43,45,...,30000],...,[...] ]
P. *_*eri 14
首先展平 ndarray 以获得一维数组,然后在其上应用 set() :
set(x.flatten())
Run Code Online (Sandbox Code Playgroud)
编辑:由于您似乎只想要一个集合数组,而不是整个数组的集合,那么您可以value = [set(v) for v in x]获取集合列表。
您问题的当前状态(可以随时更改):如何有效地从大型阵列中删除唯一元素?
import numpy as np
l=np.random.rand(3000,30000)
lout1=map(np.unique,l)
#or
lout2=[np.unique(ll) for ll in l]
Run Code Online (Sandbox Code Playgroud)
运行时间:
In [86]: timeit map(np.unique,lbig)
1 loops, best of 3: 6.03 s per loop
In [87]: timeit [np.unique(ll) for ll in lbig]
1 loops, best of 3: 6.09 s per loop
Run Code Online (Sandbox Code Playgroud)
更新:正如@hpaulj在他的评论中指出的那样,我的虚拟示例存在偏差,因为浮点随机数几乎可以肯定是唯一的。因此,这是一个更逼真的整数示例:
In [29]: l=np.random.random_integers(low=1,high=15000,size=(3000,30000))
In [30]: timeit map(np.unique,l)
1 loops, best of 3: 5.43 s per loop
In [31]: timeit [np.unique(ll) for ll in l]
1 loops, best of 3: 5.42 s per loop
Run Code Online (Sandbox Code Playgroud)
在这种情况下,输出列表的元素具有不同的长度,因为有实际的重复项要删除。