У меня есть пустой массив, элементы которого уникальны, например:
b = np.array([5, 4, 6, 8, 1, 2])
(Edit2: b
может иметь большие числа и числа с плавающей запятой. Приведенный выше пример приведен для простоты)
Я получаю числа, которые являются элементами в b.
Я хочу найти их индекс в b
, что означает Я хочу обратное отображение от значения к индексу в b
.
Я мог бы сделать
for number in input:
ind = np.where(number==b)
, который будет перебирать весь массив при каждом вызове where
.
Я также мог бы создать словарь,
d = {}
for i, element in enumerate(list(b)):
d[element] = i
Я мог бы создать этот словарь во время "предварительной обработки", но все равно я остался бы со странно выглядящим словарем, в основном с пустым кодом, который кажется (мне) не таким, каким подразумевается использование numpy.
Как я могу сделать это обратное отображение в numpy?
использование (O (1) время и память требуется):
print("index of 8 is: ", foo(b, 8))
Использование in1d, как объяснено здесь не решает мою проблему. Используя их пример:
b = np.array([1, 2, 3, 10, 4])
Я хочу иметь возможность, например, найти индекс 10
в b, во время выполнения, в O (1).
Выполнение хода предварительной обработки
mapping = np.in1d(b, b).nonzero()[0]
>> [0, 1, 2, 3, 4]
(что можно сделать с помощью np.arange(len(b))
)
на самом деле не помогает, потому что, когда 10
входит в качестве ввода, с помощью этого метода невозможно определить его индекс за O (1) времени.