2D-эквивалент numpy.unique

У меня есть набор дискретизированных координат в Nx2 numpy.ndarray.

Я хотел бы получить подсчеты и индексы каждого из этих уникальных наборов координат. numpy.unique делает именно это, но для скалярных элементов.

Есть ли какой-нибудь чистый способ сделать это, используя numpy?

Пример:

#input
coor = np.array([[10,10],[12,9],[10,5],[12,9]]) 
#output
unique_count = np.array([1,2,1])
unique_index = np.array([0,1,2]) #1 could also be 3

EDIT: unique count, будет давать подсчеты каждого из уникальных значений, т.е. 1 из [10,10], 2 of [12,9] и 1 of [10,5]. Затем можно было бы найти значения, которые они соответствуют с coor[unique_index]

Ответ 1

Вы можете использовать методы списка .count() и .index()

coor = np.array([[10, 10], [12, 9], [10, 5], [12, 9]])
coor_tuple = [tuple(x) for x in coor]
unique_coor = sorted(set(coor_tuple), key=lambda x: coor_tuple.index(x))
unique_count = [coor_tuple.count(x) for x in unique_coor]
unique_index = [coor_tuple.index(x) for x in unique_coor]