假设我们有两个形状相同的数组,使用arr_1
中的uniques元素,我想在arr_2
中找到对应的值,并构建一个字典作为输出。
(arr_1
已排序。arr_2
未排序)。
- 以下是一个示例。**
arr_1 = np.array([1,1,1,2,2,3]) # the index array, sorted
arr_2 = np.array([16,11,12,13,14,15]) # find the values, not sorted
target_dict = {1:[16,11,12], 2:[13,14], 3:[15]}
- 我使用dict理解的解决方案:**
我写了下面的代码:
target_dict = {i: arr_2[np.where(arr_1 == i)].tolist() for i in np.unique(arr_1)}
然而,在我的例子中,arr_1
和arr_2
都有超过4B的元素,因此,上面的代码可能需要100多个小时才能完成。
请问有没有更有效的方法来完成呢?先谢谢你了!
1条答案
按热度按时间i5desfxk1#
不确定为什么要使用
where
子句。可以同时对两个列表执行一次遍历来Map元素。这里使用defaultdict
是为了简单起见。由于这种方法具有线性复杂性,因此它应该足够高效地处理您的用例。