如何将Python集合转换为NumPy数组?

47 投票
4 回答
69226 浏览
提问于 2025-04-17 08:09

我在用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])

撰写回答