如何将Python集合转换为NumPy数组?
我在用Python做一个集合操作,想要找出两个numpy数组之间的对称差异。不过,结果是一个集合,我需要把它转换回numpy数组才能继续操作。请问有没有办法做到这一点?我试过的代码如下:
a = numpy.array([1,2,3,4,5,6])
b = numpy.array([2,3,5])
c = set(a) ^ set(b)
结果是一个集合:
In [27]: c
Out[27]: set([1, 4, 6])
但是如果我把它转换成numpy数组,整个集合就会被放在第一个数组元素里。
In [28]: numpy.array(c)
Out[28]: array(set([1, 4, 6]), dtype=object)
我其实想要的结果是这样的:
array([1,4,6],dtype=int)
我可以一个一个地循环处理这些元素,但我有10万个元素,希望能有一个内置的函数来省去这个循环。谢谢!
4 个回答
16
试试这个:
numpy.fromiter(c, int, len(c))
这个方法的速度是用列表作为中间结果的解决方案的两倍快。
68
做:
>>> numpy.array(list(c))
array([1, 4, 6])
而且数据类型是整数(在我这边是int64)。
39
不要把numpy数组转换成集合来进行异或运算。直接使用setxor1d就可以了。
>>> import numpy
>>> a = numpy.array([1,2,3,4,5,6])
>>> b = numpy.array([2,3,5])
>>> numpy.setxor1d(a, b)
array([1, 4, 6])