numpy 根据第一个数组的条件求第二个数组的值,最有效的方法是什么?

chhkpiq4  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(129)

假设我们有两个形状相同的数组,使用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_1arr_2都有超过4B的元素,因此,上面的代码可能需要100多个小时才能完成。
请问有没有更有效的方法来完成呢?先谢谢你了!

i5desfxk

i5desfxk1#

不确定为什么要使用where子句。可以同时对两个列表执行一次遍历来Map元素。这里使用defaultdict是为了简单起见。

from collections import defaultdict

arr_1 = [1,1,1,2,2,3]
arr_2 = [16,11,12,13,14,15]
target = defaultdict(list)
for ind, element in enumerate(arr_1):
    target[element].append(arr_2[ind])

print(dict(target))
# prints {1: [16, 11, 12], 2: [13, 14], 3: [15]}

由于这种方法具有线性复杂性,因此它应该足够高效地处理您的用例。

相关问题