Я использую pandas
, чтобы дать вам интуитивно понятный результат, а не просто цифры.Конечно, вы можете расширить решение до вашей потребности
Допустим, вы создаете pd.DataFrame
из каждого массива и отмечаете их, к какому массиву принадлежит каждый.Я округляю результаты до 2 десятичных знаков, вы можете использовать любой допуск, который вам нужен
dfa = pd.DataFrame(a).round(2)
dfa['arr'] = 'a'
Затем, объединяя, используя duplicated
и сортируя, вы можете найти интуитивно понятный Dataframe, который может удовлетворить ваши потребности
df = pd.concat([dfa, dfb, dfc])
df[df.duplicated(subset=[0,1], keep=False)].sort_values(by=[0,1])
выходы
x y arr
0 1.00 3.0 a
0 1.00 3.0 b
0 1.00 3.0 c
1 1.33 4.2 a
1 1.33 4.2 c
2 17.83 3.4 a
2 17.83 3.4 b
Индексы дублируются, поэтому вы можете просто использовать reset_index()
в конце и использовать вновь созданный столбец в качестве параметра, который указывает соответствующий индекс накаждый массив.Т.е.:
index x y arr
0 0 1.00 3.0 a
1 0 1.00 3.0 b
2 0 1.00 3.0 c
3 1 1.33 4.2 a
4 1 1.33 4.2 c
5 2 17.83 3.4 a
6 2 17.83 3.4 b
Так, например, строка 0 обозначает дублирующуюся координату и находится в index
0 из arr
a
.Строка 1 также указывает координату дублирования, найдено или index
0 из arr
b
и т. Д.
Теперь, если вы просто хотите удалить дубликаты и получить один финалмассив только с неповторяющимися значениями, вы можете использовать drop_duplicates
df.drop_duplicates(subset=[0,1])[[0,1]].to_numpy()
, что дает
array([[ 1. , 3. ],
[ 1.33, 4.2 ],
[17.83, 3.4 ],
[ 1.67, 5.4 ],
[18.6 , 12.51]])