arr = arr.reshape(-1, arr.shape[-1])
sorted_arr = arr[(np.lexsort(arr.T)), :]
diff_idx = np.where(np.any(np.diff(sorted_arr, axis=0), 1))[0]
unique_rows = [sorted_arr[i] for i in diff_idx] + [sorted_arr[-1]]
counts = np.diff(np.append(np.insert(diff_idx, 0, -1), sorted_arr.shape[0] - 1)
    )
return sorted(zip(unique_rows, counts), key=lambda x: x[1], reverse=True)
Эффективно подсчитывать количество вхождений уникальных подмассивов в NumPy?