Numpy和numdifftools多维函数

2024-10-03 13:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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}$

有什么问题吗?谢谢!在


Tags: 函数代码importnumpy列表asnpfunction
1条回答
网友
1楼 · 发布于 2024-10-03 13:20:30

out是这样创建的:

    out = np.zeros(2)

它的类型是numpy.float64。不能为这样的数组指定复杂值。根据您使用的numpy版本,您将收到一个警告或一个错误。在

用于数值微分的complex step method要求函数使用复杂值。将out强制为numpy.float64会破坏该方法。使用float(out[0])将返回值转换为浮点也会破坏方法。在

你可以试试这样的方法:

^{pr2}$

这将使用与x相同的数据类型创建{}。因此,如果x是复杂的,那么返回值也是复杂的,正如complex step方法所要求的那样。在

(当然,我们不知道为什么只使用第一个元素时,out的大小为2。大概这是对您正在使用的实际代码的简化。)

相关问题 更多 >