首页 > 解决方案 > 使用另一个数组将值重新分配给 numpy 数组

问题描述

假设我有两个 numpy 数组:arr1arr2(arr1已排序,arr2不必排序)。

arr1 = np.array([0, 3, 7, 9, 13])
arr2 = np.array([1, 2, 7, 8, 12, 14])

我想通过从下面最接近它arr2的元素来更改每个元素。arr1例如12大于0但小于3,所以必须改成012介于9和之间13,所以必须改成9,等等。

期望的输出:

array([0, 0, 7, 7, 9, 13])

我使用for循环得到了这个数组:

arr3 = np.arange(len(arr2))

for i in range(len(arr1)):
    mask = arr2>=arr1[i] if i is len(arr1)-1 else (arr2>=arr1[i])&(arr2<arr1[i+1])
    arr3[mask] = arr1[i]

print(arr3)

我想知道是否有更 numpythonic 的解决方案。谢谢你。

标签: pythonarraysnumpy

解决方案


如果min(arr1) <= min(arr2)给出,您可以结合np.searchsorted和花哨的索引来获得您想要的结果。searchsorted返回插入arr2元素以保持arr1排序的索引。从 中选择那些arr1

arr1[np.searchsorted(arr1,arr2, 'right') - 1]

推荐阅读