NumPy使用np.insert一次性插入数组多个元素报错解决方法
错误原因
你的报错核心是np.insert传参不符合函数定义规则:
np.insert的标准参数顺序是np.insert(arr, obj, values, axis=None),不支持把多个插入位置、多个插入值拆成独立位置参数依次传入。- 你写的
np.insert(B, 2, B1,8,B2,axis=1)中,前三个位置参数分别对应arr=B、obj=2、values=B1,第四个位置参数8会被识别为传给axis的值,后面又用关键字形式传了axis=1,等于给axis参数重复传值,直接触发类型错误。 - 即使不触发重复传参错误,你把第二个插入位置
8、第二个插入值B2直接堆在参数列表里的写法,函数也无法识别为“多位置插入”的参数。
修改方法
一次性多位置插入只需要遵循两个规则:
- 把所有要插入的索引整理成列表传给
obj参数:注意索引是相对于原始数组计算的,你需要在原axis=1轴的索引2位置插10,在数组末尾(原数组axis=1长度为7,末尾插入位置就是索引7)插20,所以obj传[2,7] - 把所有要插入的值整理成和数组维度匹配的结构传给
values参数,保证插入值数量和插入位置数量一一对应 - 最后通过关键字参数指定
axis=1即可
修改后的可运行代码如下:
import numpy as np B = np.array([[[0.678731133], [1.244425627], [0.767884084], [2.006154222], [3.073758392], [1.037728999], [5.032947535]]]) # 插入值整理为匹配维度的格式,形状为(1,2,1)和原数组在axis=0、axis=2维度对齐 insert_vals = np.array([[[10], [20]]]) # 插入位置对应[原索引2位置, 数组末尾位置] B3 = np.insert(B, [2, 7], insert_vals, axis=1) print("B3=", B3) print("B3 shape=", B3.shape)
运行后输出完全符合预期:
B3= [[[ 0.67873113] [ 1.24442563] [10. ] [ 0.76788408] [ 2.00615422] [ 3.07375839] [ 1.037729 ] [ 5.03294754] [20. ]]] B3 shape= (1, 9, 1)
注:如果插入位置顺序有调整,只需要同步调整
obj里的索引列表和values里值的对应顺序即可,numpy会自动处理插入后的索引偏移,不需要手动计算插入后的位置。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

