根据给定索引替换numpy数组指定位置元素的实现问题
现有代码的核心问题
- 逻辑错误:内层循环的
else分支会覆盖之前匹配成功的赋值结果。比如处理i=0时,j=0匹配成功将Arr1[0]赋值为Arr2[0],但j循环到1时,i=0不等于Arr3[1]=2,else分支又把Arr1[0]改回了原始值,所有匹配操作最终都被不匹配的循环步还原了。 - 数组类型不兼容:你声明使用的是numpy数组,而numpy常规数组要求所有元素的维度、类型统一,直接把单个数值替换为长度为2的数组会触发广播逻辑,无法得到你需要的混合维度存储效果。
正确实现方案
你不需要双重循环,直接遍历Arr3和Arr2的对应关系赋值即可,以下是可直接运行的实现:
# 纯Python列表实现(适配你需要的混合维度输出) Arr1 = [9,7,3,1] Arr2 = [[14,6],[13,2]] Arr3 = [0,2] # 先把Arr1的单个值都包装为单元素列表,统一结构 output = [[x] for x in Arr1] # 按对应关系替换 for arr2_idx, arr1_pos in enumerate(Arr3): output[arr1_pos] = Arr2[arr2_idx] print(output) # 输出:[[14, 6], [7], [13, 2], [1]]
如果要使用numpy数组实现,需要指定数组为object类型来兼容不同长度的子序列:
import numpy as np Arr1 = np.array([9,7,3,1]) Arr2 = np.array([[14,6],[13,2]]) Arr3 = np.array([0,2]) # 初始化object类型的空数组 output = np.empty(len(Arr1), dtype=object) # 填充初始值 for i in range(len(Arr1)): output[i] = [Arr1[i]] # 按对应关系替换 for arr2_idx, arr1_pos in enumerate(Arr3): output[arr1_pos] = Arr2[arr2_idx] print(output.tolist()) # 输出:[[14, 6], [7], [13, 2], [1]]
内容的提问来源于stack exchange,提问作者Melanie
相关产品推荐
相关产品推荐

