python - 使用另一个数组将值重新分配给 numpy 数组
问题描述
假设我有两个 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循环得到了这个数组:
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 的解决方案。谢谢你。
解决方案
如果min(arr1) <= min(arr2)
给出,您可以结合np.searchsorted
和花哨的索引来获得您想要的结果。searchsorted
返回插入arr2
元素以保持arr1
排序的索引。从 中选择那些arr1
。
arr1[np.searchsorted(arr1,arr2, 'right') - 1]
推荐阅读
- c++ - C11 独立内存屏障 LoadLoad StoreStore LoadStore StoreLoad
- swift - Swift:DateFormatter 返回 nil
- html - 带有 CSS 的字体的圆角边缘
- c++ - 无法构建 DLL
图书馆 - graphql - 在 graphql 订阅中未定义 NestJS 上下文
- python - 从浮点数字符串中获取torch.tensor
- discord.js - 如何制作频道?(discord.js)
- c++ - 在 C++ 中取消引用迭代器行为
- php - Laravel:使用 belongsTo() 向我的模型添加意外属性
- powershell - Powershell PSCustomObject 提取值