【发布时间】:2018-07-31 11:24:17
【问题描述】:
我有两个数组,A 描述数据“块”的起始位置,B 描述非阻塞原始数据中感兴趣的事物的绝对位置。
我希望能够生成块数组A 的索引,该索引与块B 中标识的元素的位置相匹配。
例如
import numpy as np
A = np.array([0,10,13,25,27,33,100])
B = np.array([3, 3, 5, 21, 27, 32, 74])
我想返回一个如下所示的数组:
array([0, 0, 0, 2, 4, 4, 5])
也就是说,用A 来描述B 中元素的索引位置的数组。
我可以写一个循环,比如:
list_holder = []
for e in B:
list_holder.append(np.where(A>e)[0][0]-1)
np.array(list_holder)
但事实证明,对于大型数组,这变得相当慢 - 是否有任何功能或 numpy-tricks 可以将这个相对简单的操作作为单线执行?
【问题讨论】:
-
你可以在 O(N) 中做到这一点。只需编写一个在 1 遍中迭代数组的函数。不需要 O(N^2) 解决方案。
-
好点。 digitize 对假设更为笼统(您的数组已经排序)。
标签: python arrays numpy functional-programming