mis*_*haF 28 python arrays numpy set
我在python中使用set操作来执行两个numpy数组之间的对称差异.然而,结果是一个集合,我需要将它转换回一个numpy数组继续前进.有没有办法做到这一点?这是我试过的:
a = numpy.array([1,2,3,4,5,6])
b = numpy.array([2,3,5])
c = set(a) ^ set(b)
Run Code Online (Sandbox Code Playgroud)
结果是一组:
In [27]: c
Out[27]: set([1, 4, 6])
Run Code Online (Sandbox Code Playgroud)
如果我转换为numpy数组,它会将整个集合放在第一个数组元素中.
In [28]: numpy.array(c)
Out[28]: array(set([1, 4, 6]), dtype=object)
Run Code Online (Sandbox Code Playgroud)
但是,我需要的是:
array([1,4,6],dtype=int)
Run Code Online (Sandbox Code Playgroud)
我可以循环遍历要逐个转换的元素,但我将拥有100,000个元素,并希望有一个内置函数来保存循环.谢谢!
tit*_*ito 38
做:
>>> numpy.array(list(c))
array([1, 4, 6])
Run Code Online (Sandbox Code Playgroud)
并且dtype是int(在我这边的int64.)
ken*_*ytm 29
不要将numpy数组转换为set来执行exclusive-or.直接使用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])
Run Code Online (Sandbox Code Playgroud)
试试这个.
numpy.array(list(c))
Run Code Online (Sandbox Code Playgroud)
在初始化numpy数组之前转换为list会将各个元素设置为整数而不是第一个元素作为对象.