假設我有兩個numpy陣列。arr1和arr2(arr1是被排序的,arr2不需要被排序)。
arr1 = np. array([0, 3, 7, 9, 13] )
arr2 = np. array([1, 2, 7, 8, 12, 14] )
我想通過arr2中的元素來改變arr1中的元素,該元素從下面看與它最接近。因此,例如,1和2大于0但小于3,所以它們必須被改為0,12在9和13之間,所以它必須被改為9,等等。
期望的輸出:
array([0, 0, 7, 7, 9, 13] )
我使用for-loop得到這個陣列:
arr3 = np.range(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[掩碼] = arr1[i] 。
print(arr3)
我想知道是否有更多的numpythonic解決方案。謝謝你。
uj5u.com熱心網友回復:
如果min(arr1) <= min(arr2),你可以結合np.searchsorted和花式索引來得到你想要的結果。searchsorted回傳要插入arr2元素以保持arr1排序的索引。從arr1中選擇這些元素。
arr1[np.searchsorted(arr1,arr2, 'right') - 1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/326889.html
標籤:
上一篇:用Python制作三維對角線矩陣
