求解ValueError:数组形状(20,)与(6,)无法广播运算问题
问题解决方案
你遇到的ValueError: operands could not be broadcast together with shapes (20,) (6,)是NumPy数组广播机制的维度不兼容问题——当你对形状为(20,)的输入数组x和形状为(6,)的级数项数组z执行x**z时,两者的维度无法匹配完成广播运算。
修复步骤及代码
核心是调整数组形状让广播生效,并确保后续求和维度正确:
import numpy as np import scipy as sp def fun2(x): serval = 7 # 泰勒级数项数,后续可改为用户输入 z = np.arange(1, serval, 1) # 将x转为列向量,实现与z的广播兼容 x_col = x.reshape(-1, 1) v = (x_col ** z) / sp.special.factorial(z) # 对每个x对应的泰勒项求和,得到与x同长度的数组 u = np.sum(v, axis=1) y = (3 * x - 10) * (1 + u) return y
关键修改说明
x.reshape(-1, 1):把原形状(20,)的x转换为(20,1)的列数组,这样和(6,)的z运算时,NumPy会自动将x的列复制6次、z的行复制20次,生成(20,6)的结果数组,每个x元素对应所有级数项的幂次计算。np.sum(v, axis=1):指定按行求和,每个x元素对应的6个泰勒项相加,得到长度为20的u数组,确保后续(3*x-10)*(1+u)能正常执行逐元素运算。
内容的提问来源于stack exchange,提问作者Kourosh Keshavarz
相关产品推荐
相关产品推荐

