Создать отображение из чисел в диапазон уникальных чисел

1

У меня есть массив numpy, содержащий много записей вроде (102, 6, 7, 192, 29...). Однако они повторяются часто, так что всего 32 уникальных номера. Каков наилучший способ создания сопоставления из 32 уникальных номеров в диапазоне 0-31. Я думаю о функции, где я могу подавать в массив, содержащий все 32 разных "высоких числа", и я получаю массив с той же длиной, что и оригинал, но со всеми значениями в диапазоне 0-31.

Теги:
arrays
numpy

1 ответ

1
Лучший ответ

unique функция Numpy может это сделать, вам просто нужно сказать ей, чтобы она возвращала индексы уникального массива, которые можно использовать для восстановления исходного массива. Вот короткая демонстрация, основанная на примере в документах.

import numpy as np

np.random.seed(42)

# Create an array of repeated "large" values
a = np.random.randint(0, 5, size=20) * 11
print(a)

# Extract the sorted unique values, and the indices of the unique
# array which can be used to reconstruct the original array
u, inv = np.unique(a, return_inverse=True)
print(inv)

new = u[inv]
print(new)

выход

[33 44 22 44 44 11 22 22 22 44 33 22 44 11 33 11 33 44  0 33]
[3 4 2 4 4 1 2 2 2 4 3 2 4 1 3 1 3 4 0 3]
[33 44 22 44 44 11 22 22 22 44 33 22 44 11 33 11 33 44  0 33]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню