Python函数传参Bug:numpy数组形状不匹配导致运算报错
错误原因
你构造pointP时的维度顺序不符合NumPy广播规则要求:
- 从DataFrame取出的
x = df["XC"]、y = df["YC"]都是长度为28686的一维序列,使用np.array([x,y])拼接后得到的pointP维度为(2, 28686),第一维是x/y坐标通道,第二维是样本点数量 points[0]是长度为2的一维坐标向量,维度为(2,)- NumPy广播规则要求运算时从尾部维度开始对齐,
(2,28686)的尾部维度是28686,和(2,)的尾部维度2无法匹配,因此触发运算报错。
修复方案
调整pointP的构造逻辑,把样本点数量放在第一维,坐标维度放在最后一维,适配广播规则:
将原代码中构造pointP的行:
pointP = np.array([x,y])
修改为以下任意一种即可:
# 方法1:按列拼接x、y,直接得到(样本数, 2)的维度 pointP = np.column_stack([x, y]) # 方法2:对原构造结果转置,调换维度顺序 pointP = np.array([x, y]).T
修改后pointP的维度会变为(28686, 2),尾部维度和points[0]的(2,)匹配,可以正常执行广播减法运算。
额外提示:你当前的返回值接收顺序
rW,rV,rU = calcRatios(...)和函数返回顺序return ratioV,ratioW,ratioU不匹配,会导致结果赋值错误,建议同步调整接收顺序为rV, rW, rU = calcRatios(...)。
内容的提问来源于stack exchange,提问作者Megan Darcy
相关产品推荐
相关产品推荐

