我在python中使用set操作来执行两个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)

我可以循环遍历要逐个转换的元素,但我将拥有100,000个元素,并希望有一个内置函数来保存循环。 谢谢!

===============>>#1 票数:36

做:

>>> numpy.array(list(c))
array([1, 4, 6])

并且dtype是int(在我这边的int64。)

===============>>#2 票数:28 已采纳

不要将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])

===============>>#3 票数:7

尝试这个。

numpy.array(list(c))

在初始化numpy数组之前转换为list会将各个元素设置为整数而不是第一个元素作为对象。

===============>>#4 票数:1

尝试:

numpy.fromiter(c, int, len(c))

这是使用list作为中间产品的解决方案的两倍。

  ask by mishaF translate from so

未解决问题?本站智能推荐:

关注微信公众号