Я прошел через эти потоки:
- Найти уникальные строки в numpy.array
- Удаление дубликатов в каждой строке массива numpy
- Pandas: уникальный формат данных
и все они обсуждают несколько методов вычисления матрицы с уникальными строками и столбцами.
Однако решения выглядят немного запутанными, по крайней мере, для неподготовленного глаза. Вот, например, верхнее решение из первого потока, который (поправьте меня, если я ошибаюсь), я считаю, что это самый безопасный и быстрый:
np.unique(a.view(np.dtype((np.void, a.dtype.itemsize*a.shape[1])))).view(a.dtype).reshape(-1,
a.shape[1])
В любом случае вышеупомянутое решение возвращает матрицу уникальных строк. То, что я ищу, - это что-то вроде первоначальной функциональности np.unique
u, indices = np.unique(a, return_inverse=True)
который возвращает не только список уникальных записей, но также членство каждого элемента в каждой найденной уникальной записи, но как это сделать для столбцов?
Вот пример того, что я ищу:
array([[0, 2, 0, 2, 2, 0, 2, 1, 1, 2],
[0, 1, 0, 1, 1, 1, 2, 2, 2, 2]])
Мы имели бы:
u = array([0,1,2,3,4])
indices = array([0,1,0,1,1,3,4,4,3])
Если разные значения в u
представляют собой набор уникальных столбцов в исходном массиве:
0 -> [0,0]
1 -> [2,1]
2 -> [0,1]
3 -> [2,2]
4 -> [1,2]