web-dev-qa-db-ja.com

pythonセットをnumpy配列に変換する方法は?

pythonでset演算を使用して、2つの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)

要素をループして1つずつ変換することもできますが、10万個の要素があり、ループを保存する組み込み関数が必要です。ありがとう!

29
mishaF

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])
28
kennytm

行う:

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

そして、dtypeはint(私の側ではint64)です。

36
tito

これを試して。

numpy.array(list(c))

Numpy配列を初期化する前にリストに変換すると、個々の要素が最初の要素ではなく整数にオブジェクトとして設定されます。

7
Abhijit

試してください:

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

これは、中間製品としてのリストを使用したソリューションの2倍の速さです。

1
tstanisl