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