Подтвердить что ты не робот

Как преобразовать набор python в массив numpy?

Я использую операцию set в 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)

Я мог бы перебирать элементы для преобразования по одному, но у меня будет 100 000 элементов и надеемся на встроенную функцию для сохранения цикла. Спасибо!

4b9b3361

Ответ 1

Не конвертируйте массив 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])

Ответ 2

делать:

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

И dtype - int (int64 на моей стороне.)

Ответ 3

Попробуйте это.

numpy.array(list(c))

Преобразование в список до инициализации массива numpy приведет к тому, что отдельные элементы будут целочисленными, а не первым элементом в качестве объекта.

Ответ 4

Пытаться:

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

Это вдвое быстрее, чем решение со списком, как средний продукт.