2014-12-03 5 views
0

Я проходил несколько решений, но я не могу найти решение, в котором я нуждаюсь.Сравнение двух массивов numpy и элементов удаления

У меня есть два numpy массивов. Возьмем здесь небольшой пример.

x = [1,2,3,4,5,6,7,8,9] 
y = [3,4,5] 

Я хочу сравнить x и y и удалить те значения x, которые находятся в y.

Так что я ожидаю, что моя final_x быть

final_x = [1,2,6,7,8,9] 

я узнал, что np.in1d возвращает булево массив той же длины, что x Правда, где элемент x в y и ложь в противном случае. Но как его использовать, если не какой-либо другой метод для получения моего final_x. ??

ответ

2

Просто передайте отрицанием версию булева массива, возвращенного np.in1d в массив x:

>>> x = np.array([1,2,3,4,5,6,7,8,9]) 
>>> y = [3,4,5] 
>>> x[~np.in1d(x, y)] 
array([1, 2, 6, 7, 8, 9]) 
+0

Что означает '' 'здесь? – user3397243

+1

Это означает отрицание, например. '[True, False, False]' становится '[False, True, True]' – Matt

+2

В numpy> = 1.8 'in1d' имеет необязательный аргумент ключевого слова' invert', который, если установлен в 'True', возвращает отрицательную маску напрямую, и делает это быстрее, чем отрицает это сам, см. [документы] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.in1d.html). – Jaime

3

Если у вас действительно есть Numpy массивы, то вы можете использовать numpy.setdiff1d ниже

import numpy as np 

x = np.array([1,2,3,4,5,6,7,8,9]) 
y = np.array([3,4,5]) 

z = np.setdiff1d(x, y) 
# array([1, 2, 6, 7, 8, 9]) 
0

Вы можете использовать встроенные наборы:

final_x = set(x) - set(y) 

и вычесть второй из первого. Вы можете конвертировать final_x в list или numpy.array, если вы чувствуете себя такой склонной.

Смежные вопросы