You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scipy.optimize.fsolve求解时遇AttributeError及警告问题求助

问题解决思路及修正方案

核心错误分析

  • AttributeError: 'numpy.ndarray' object has no attribute 'exp':numpy数组没有.exp()方法,必须用numpy.exp()函数对数组元素逐元素计算指数,而非直接调用数组的exp属性。
  • VisibleDeprecationWarning:多因数组维度不匹配、标量与数组不兼容运算等过时操作导致,需确保运算时各数组形状一致。

修正步骤

  1. 修复exp调用方式:
    将代码中所有arr.exp()的写法替换为np.exp(arr),使用numpy官方指数函数处理数组。

  2. 规范固定x₂的求解逻辑:
    fsolve要求待求解参数为数组形式,即使仅求解单个x₁,初始猜测也需传入数组;同时确保构造的输入向量[x₁, x₂]形状正确,避免维度不匹配警告。

  3. 约束解的范围:
    求解完成后检查结果是否在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:04:59