Python NumPy多维数组np.insert插入拼接异常问题求解
NumPy多维数组插入操作异常修复
问题现象
使用NumPy对多维数组执行按位置插入拼接时,触发两类异常:
- 当位置参数
C1=[]时,生成结果B1存在多余的[0]元素 - 当位置参数
C2=[1,2]时,程序抛出形状不匹配的ValueError
插入逻辑需要满足以下规则:
- 若
C=[],无需在结果中插入A1 - 若C传入单个位置,仅在对应位置插入A1
- 若C传入多个位置,在所有指定位置分别插入A1
- 固定在
D=[7]对应的末尾位置插入A2
原问题代码
import numpy as np A=np.array([[[1], [2], [3], [4], [5], [6], [7]]]) C1=[] C2=[1,2] D=[7] A1=np.array([0]) A2=np.array([0]) B1=np.insert(A,C1+D,[A1,A2],axis=1) print("B1 =",[B1]) B2=np.insert(A,C2+D,[A1,A2],axis=1) print("B1 =",[B2])
异常输出
B1 = [array([[[1], [2], [3], [4], [5], [6], [7], [0], [0]]])] in <module> B2=np.insert(A,C2+D,[A1,A2],axis=1) File "<__array_function__ internals>", line 5, in insert File "C:\Users\USER\anaconda3\lib\site-packages\numpy\lib\function_base.py", line 4678, in insert new[tuple(slobj)] = values ValueError: shape mismatch: value array of shape (2,1) could not be broadcast to indexing result of shape (3,1,1)
预期正确结果
B1 = [array([[[1], [2], [3], [4], [5], [6], [7], [0]]])] B2 = [array([[[1], [0], [0], [2], [3], [4], [5], [6], [7], [0]]])]
错误原因
np.insert要求传入的待插入值数量,必须和插入位置的数量严格对应:
- 生成B1时,
C1+D得到的插入位置只有1个(索引7),但代码硬编码传入了[A1,A2]2个插入值,因此多插入了一个0元素 - 生成B2时,
C2+D得到的插入位置有3个(索引1、2、7),但代码仅传入2个插入值,形状无法匹配广播规则,触发报错
修复方案
根据传入的C参数长度动态生成对应数量的A1插入值,再拼接末尾位置需要的A2,保证插入值数量和位置数量完全匹配。
修复后代码:
import numpy as np A = np.array([[[1], [2], [3], [4], [5], [6], [7]]]) C1 = [] C2 = [1,2] D = [7] A1 = np.array([0]) A2 = np.array([0]) # 生成B1 pos1 = C1 + D vals1 = [A1 for _ in C1] + [A2] B1 = np.insert(A, pos1, vals1, axis=1) print("B1 =", [B1]) # 生成B2 pos2 = C2 + D vals2 = [A1 for _ in C2] + [A2] B2 = np.insert(A, pos2, vals2, axis=1) print("B2 =", [B2])
运行后输出和预期结果完全一致,无报错。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

