У меня есть большой массив NumPy (с 100 000 000 элементов), который имеет уникальные и отсортированные значения. Массив может быть сгенерирован неэффективно с чем-то вроде этого (он съест вашу память, так как массив большой, но мой массив получен эффективно из другого источника).
import numpy as np
x = np.random.choice(9509413522, size=100_000_000, replace=False) # this will take a ton of memory!
x = np.sort(x)
С этим массивом я хочу создайте словарь Python, где ключи - это уникальные элементы массива, а значения - соответствующие индексы массива. Как правило, я мог бы сделать:
some_dict = {v: i for i, v in enumerate(x)}
Но это занимает слишком много времени для большого массива (размер 100 000 000 элементов!), И я надеялся, что есть более быстрый способ сделать это sh.
В конечном итоге, у меня есть массив y
(с избыточными элементами), который мне нужно быстро преобразовать в соответствующее ему значение из some_dict
, выполнив:
np.array([some_dict[k] for k in y])
# or, alternatively
np.vectorize(some_dict.get)(y)