如何不使用拼接操作按指定索引位置合并两个NumPy数组?
问题解答
这个需求完全可以实现,逻辑非常清晰。
你定义的两个数组本身都是严格升序的,其中array2存储0到358的所有偶数,array1存储95到319、步长为4的所有奇数,两个数组没有重复值,你要求的插入规则本质上就是让合并后的数组保持升序排列。
实现方法
方法1:拼接后直接排序(最简洁)
两个数组无值重叠,合并排序后天然满足插入位置要求,代码如下:
import numpy as np array1 = np.arange(95, 320, 4) array2 = np.arange(0, 360, 2) merged_array = np.sort(np.concatenate([array1, array2]))
可以直接验证你举的示例:
# 查找95在合并后数组的位置 idx_95 = np.where(merged_array == 95)[0][0] print(merged_array[idx_95 - 1], merged_array[idx_95], merged_array[idx_95 + 1]) # 输出:94 95 96,完全符合插入要求
方法2:定位插入位置后插入(逻辑完全匹配需求描述)
如果需要严格按照“找到array2中对应位置再插入”的逻辑实现,可以用np.searchsorted定位每个array1元素的插入索引,再调用插入方法,结果和方法1完全一致:
# 计算array1每个元素在array2中应该插入的位置 insert_pos = np.searchsorted(array2, array1) merged_array_v2 = np.insert(array2, insert_pos, array1)
说明:
np.searchsorted是针对有序数组设计的方法,返回的索引刚好可以保证插入后数组仍然有序,和你描述的“95插在array2[47]=94和array2[48]=96之间”的规则完全对应。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

