我用numddifftools包计算多维函数的hessians(从R^n到R^n)。在更改代码以使用numpy数组而不是列表时,我发现这样做会破坏代码。具体来说:
import numpy as np
import numdifftools as nd
def function(x):
out = np.zeros(2)
out[0] = x[0] - x[1]**2/2.0
return float(out[0])
tempHessian = nd.Hessian(function, method='complex')
tempHessian([0.4,0.4])
产生错误: …\Continuum\Anaconda3\lib\site packages\ipykernel_启动器.py:8:ComplexWarning:将复数值转换为实数会丢弃虚部
给出一个零黑森。在
但是,这个很好:
^{pr2}$有什么问题吗?谢谢!在
当
out
是这样创建的:它的类型是
numpy.float64
。不能为这样的数组指定复杂值。根据您使用的numpy版本,您将收到一个警告或一个错误。在用于数值微分的complex step method要求函数使用复杂值。将
out
强制为numpy.float64
会破坏该方法。使用float(out[0])
将返回值转换为浮点也会破坏方法。在你可以试试这样的方法:
^{pr2}$这将使用与}。因此,如果
x
相同的数据类型创建{x
是复杂的,那么返回值也是复杂的,正如complex step方法所要求的那样。在(当然,我们不知道为什么只使用第一个元素时,
out
的大小为2。大概这是对您正在使用的实际代码的简化。)相关问题 更多 >
编程相关推荐