python - 使用 scipy.integrate.dblquad 在 Python 中双重集成 x*np.log(x)
问题描述
下面的代码使用双重积分来计算copula 密度函数scipy.integrate.dblquad
的微分熵 ,它有一个依赖参数,通常为正。公式可以在这里找到。c*np.log(c)
c
theta
import numpy as np
from scipy import integrate
def copula_entropy(theta):
c = lambda v, u: ((1+theta)*(u*v)**(-1-theta)) * (u**(-theta)
+ v**(-theta) -1)**(-1/theta-2)
return -integrate.dblquad(c*np.log(c), 0, 1, lambda u: 0, lambda u: 1)[0]
调用函数
copula_entropy(1)
返回错误
TypeError: loop of ufunc does not support argument 0 of type function which has no callable log method
如何使该功能起作用?
解决方案
第一个参数必须是可调用的,所以只需将其包装在一个lambda
自身中:
import numpy as np
from scipy import integrate
def copula_entropy(theta):
c = lambda v, u: ((1+theta)*(u*v)**(-1-theta)) * (u**(-theta)+v**(-theta)-1)**(-1/theta-2)
return -integrate.dblquad(lambda u,v: c(v,u)*np.log(c(v,u)), 0, 1, lambda u: 0, lambda u: 1)[0]
(请注意,我还c
根据您给出的公式更改了表达式)。
推荐阅读
- highcharts - Highcharts图表更新功能导致数据点缺失
- python - 在 Python 中检查多个输入的有效性
- node.js - 使用nodejs的事件之间的条件
- javascript - JavaScript如何从地图数组中获取长度
- ios - 无法访问 OVM Samba 共享 MacOs / iOS(无效参数)
- html - 如何使用 css 做一个不规则的 exagon?
- javascript - 在 React Router v6 中将 Props 传递给 Outlet
- python - 在 sql whit python 中插入两个列表
- java - Mongo Java Driver 4+ 构造函数问题
- java - 使用 XMLEventReader 读取部分 XML 文件时,如何配置结果的封闭标签?