Ну, на самом деле вам не нужно numpy для достижения того, что вы пытаетесь сделать.
Вы можете получить требуемый результат, просто используя a для l oop:
list1 = [['dog', 123, -10],['cat', 44, -5],['rabbit', 99, 2]]
list2 = [['dog', 123, -10],['parrot', 44, -5],['rabbit', 99, 2]]
uniques=[]
for i,j in zip(list1,list2):
if i!=j:
uniques.append(j)
print(uniques)
Чтобы ответить на ваш вопрос о том, почему np.unique () не дает вам уникальный кортеж, вы ошибаетесь в том, как он на самом деле работает в вашем случае.
Обратите внимание, что когда вы выполняете: data = np.array (mixem), он фактически создает матрицу numpy, поэтому при выполнении np.unique () он создает все уникальные элементы в матрице numpy.
>>> data
>>> array([['dog', '123', '-10'],
['cat', '44', '-5'],
['rabbit', '99', '2'],
['dog', '123', '-10'],
['parrot', '44', '-5'],
['rabbit', '99', '2']], dtype='<U6')
В вашем коде список new_array содержит следующие элементы:
>> new_array = [tuple(row) for row in data]
>> new_array
>> [('dog', '123', '-10'), ('cat', '44', '-5'), ('rabbit', '99', '2'), ('dog', '123', '-10'), ('parrot', '44', '-5'), ('rabbit', '99', '2')]
и, следовательно, unique [] содержит:
>>> uniques = np.unique(new_array)
>>> uniques
array(['-10', '-5', '123', '2', '44', '99', 'cat', 'dog', 'parrot',
'rabbit'], dtype='<U6')
У вас фактически есть список списков сначала, а затем вы конвертируете его в массив numpy (делая, data = np.array (mixem)), а затем снова вы конвертируете его в список кортежей (делая, new_array = [tuple (row) для строка в данных]) и, наконец, вы снова конвертируете его обратно в массив numpy ing, uniques = np.unique (new_array)), что не имеет смысла, так как большая часть кода на самом деле избыточна.
Хорошо, даже если np.uniques каким-то образом будет работать, чтобы предоставить вам уникальные кортежи, тогда он будет производить 4 уникальных кортежа, ie: [('dog', '123', '-10'), ('cat', '44', '-5'), ('rabbit', '99 ',' 2 '), (' parrot ',' 44 ',' -5 ')]
Чтобы получить этот результат, вам нужно использовать axis = 0 в качестве параметра, как показано ниже:
>>> uniques = np.unique(new_array, axis=0)
>>> uniques
array([['cat', '44', '-5'],
['dog', '123', '-10'],
['parrot', '44', '-5'],
['rabbit', '99', '2']], dtype='<U6')
То, что вы пытаетесь сделать, это:
1) Сравнить list1 и list2.
2) Показать элементы списка 2, которых нет в списке1.
Что вы на самом деле делаете:
1) Объединение списков1 и списков 2.
2) Создание numpy матрицы, состоящей из списков1 и списков2 .
3) Поиск уникальных элементов в матрице.