【发布时间】:2019-06-06 18:34:45
【问题描述】:
我有一个numpy数组,它的元素是唯一的,例如:
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 的用途。
如何在 numpy 中进行这种反向映射?
使用情况(需要 O(1) 时间和内存):
print("index of 8 is: ", foo(b, 8))
- Edit1:不是this 的副本
按照here 的解释使用 in1d 并不能解决我的问题。使用他们的例子:
b = np.array([1, 2, 3, 10, 4])
我希望能够在运行时在 O(1) 中找到例如 10 在 b 中的索引。
进行预处理
mapping = np.in1d(b, b).nonzero()[0]
>> [0, 1, 2, 3, 4]
(可以使用np.arange(len(b)) 完成)
并没有真正的帮助,因为当10 作为输入时,用这种方法不可能在 O(1) 时间内告诉它的索引。
【问题讨论】:
标签: python arrays numpy indexing