使用scipy.optimize.fsolve求解时遇AttributeError及警告问题求助
问题解决思路及修正方案
核心错误分析
- AttributeError: 'numpy.ndarray' object has no attribute 'exp':numpy数组没有
.exp()方法,必须用numpy.exp()函数对数组元素逐元素计算指数,而非直接调用数组的exp属性。 - VisibleDeprecationWarning:多因数组维度不匹配、标量与数组不兼容运算等过时操作导致,需确保运算时各数组形状一致。
修正步骤
修复
exp调用方式:
将代码中所有arr.exp()的写法替换为np.exp(arr),使用numpy官方指数函数处理数组。规范固定x₂的求解逻辑:
fsolve要求待求解参数为数组形式,即使仅求解单个x₁,初始猜测也需传入数组;同时确保构造的输入向量[x₁, x₂]形状正确,避免维度不匹配警告。约束解的范围:
求解完成后检查结果是否在0-1区间内,若超出需调整初始猜测或验证模型逻辑。
修正后示例代码
import numpy as np from scipy.optimize import fsolve def objective(x1, fixed_x2, w_xx, b_xx, y_test): # 从fsolve传入的数组中提取x1标量,构造完整输入向量 x = np.array([x1[0], fixed_x2]) # 执行矩阵运算,用np.exp处理数组指数计算 hidden_layer = np.dot(x, w_xx) + b_xx output = np.exp(hidden_layer) # 返回与目标值的差值,fsolve会寻找差值为0的x1 return output - y_test # 假设已定义w_xx、b_xx、y_test fixed_x2_value = 0.3 # 你要固定的x₂值 initial_guess_x1 = [0.5] # x₁的初始猜测,必须为数组 # 调用fsolve求解 x1_result = fsolve(objective, initial_guess_x1, args=(fixed_x2_value, w_xx, b_xx, y_test)) # 验证结果范围 if 0 <= x1_result[0] <= 1: print(f"求解得到x₁: {x1_result[0]:.4f}") else: print("求解结果超出0-1范围,请调整初始猜测或检查模型参数")
额外注意事项
- 确保权重矩阵
w_xx的形状与输入向量匹配:输入是2维(x₁,x₂),则w_xx应为(2, n)(n为隐藏层神经元数量),偏置b_xx应为(n,)形状,避免矩阵乘法维度错误。 - 若警告仍存在,检查是否有其他过时操作(比如用
*代替np.dot做矩阵乘法),替换为numpy推荐的运算方式。
内容的提问来源于stack exchange,提问作者Ask_delta
相关产品推荐
相关产品推荐

