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

使用NumPy/SciPy最小化行列式时遇UFuncTypeError错误求助

解决SciPy minimize计算行列式时的UFuncTypeError错误

问题原因

scipy.optimize.minimize在优化过程中,会向目标函数传递单元素numpy数组作为参数(即使初始值x0是标量)。此时你的N函数生成的数组会因为混合了标量和数组元素,被自动推断为object dtype,而np.linalg.det无法处理object类型的数组,因此抛出类型转换错误。

单独调用obj(0.054)正常是因为此时传入的是标量float,N生成的是float64类型数组,det可以正常计算。

解决方案

有两种简单的修复方式:

方式一:在目标函数中将参数转为标量

修改目标函数,把minimize传递的数组参数转为标量:

obj = lambda f: np.abs(np.linalg.det(N(xi, float(f))))
# 或者更稳妥的处理单元素数组:
# obj = lambda f: np.abs(np.linalg.det(N(xi, f.item())))

方式二:显式指定数组的数值类型

修改N函数,强制返回float64类型的数组,避免dtype被推断为object:

def N(xi,f):
    return np.array([[1,f],[xi,1]], dtype=np.float64)

验证

修改后重新运行minimize即可正常执行:

m = minimize(obj, x0)
print(m)

内容的提问来源于stack exchange,提问作者DieLuftDerFreiheit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:05:02