2011-12-11 85 views
21

我在python中使用set操作來執行兩個numpy數組之間的對稱差異。然而,結果是一個集合,我需要將其轉換回numpy數組以向前移動。有沒有辦法做到這一點?下面是我的嘗試:如何將python集轉換爲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) 

我可以遍歷所有的元素逐一進行轉換,但我一定要有100000元,並希望有一個內置功能保存循環。謝謝!

回答

24

的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]) 
+0

當比較次數很大時,是否使用了numpy set例程,比如'setxor1d',壞了?也許是一個新問題,但我認爲這個答案非常相關。在我的情況下,我將擁有10萬個+集合操作的100k個對象。 – Annan

26

務必:

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

而D型爲int(在我身邊的Int64)

+0

謝謝蒂託!現在我看到KennyTM有一個更有效的答案,但你的工作也很好! – mishaF

+4

這實際上回答了標題中的問題。 –

5

試試這個。

numpy.array(list(c)) 

在初始化numpy數組之前轉換爲列表會將各個元素設置爲整數而不是第一個元素作爲對象。