python - 如果函数未定义,scipy root 返回猜测
问题描述
我正在尝试进行参数研究。我有一个非常复杂的函数,它不是为所有值定义的。
我使参数变化并且任何时候都扎根,但是如果参数使我的函数未定义,则scipy.optimize.root()
返回猜测值而不是错误或'nan'
.
仅当定义了函数时,我如何才能获得 root 权限(无需先确定定义函数的空间)?
我尝试创建一个简单的示例以方便理解:
import numpy as np
from scipy.optimize import root
global k
def F(X):
np.seterr(all='raise')
try:
f1=np.log(4.80-(X+k))
return f1
except:
return np.nan
guess = 10
ks=[i/2.0 for i in range(10)]
for k in ks:
root(F, guess)
解决方案
您应该将 try-except 块包裹在根函数周围;这也是您要测试 nan 的地方。您应该进一步捕获 scipy/root 引发的特定异常,而不是每个异常。
import numpy as np
from scipy.optimize import root
def myroot(F, guess):
np.seterr(all='raise')
try:
res = root(F, guess)
except FloatingPointError as exp:
return guess
if np.isnan(res):
return guess
return res
global k
def F(X):
return np.log(4.80-(X+k))
ks=[i/2.0 for i in range(10)]
guess = 10
for k in ks:
print(myroot(F, guess))
推荐阅读
- python - 使用两个数据帧之间的条件语句获取计数的 Pandas 矢量化方法
- networking - GCP 防火墙规则似乎不适用于谷歌网络之外
- powershell - 在不启用 -Verbose 的情况下捕获详细流
- python - 在 AWS Sagemaker 中使用 TensorFlow Estimator 时,训练作业是否会自动将模型工件保存到 /opt/ml/model?
- spring-boot - spring boot 执行器调用 /actuator/logfile 端点返回 500 并带有 java.util.HashMap 不能转换为 org.springframework.core.io.Resource
- c - 如何在 Tensorflow Lite(实验 C API)中创建输入张量并与解释器一起使用?
- c++ - 模板化转换运算符的重载解决方案
- vb.net - 我的 VB.NET 循环代码不起作用。有任何想法吗?
- python - 从网页中提取格式为 JSON 的文本
- java - 我的问题是关于在 groovy 中从日期转换纪元毫秒