python - 如何使用 numpy/scipy 求解方程中已知函数的 x?

标签 python numpy statistics scipy

我有一个来自 scipy 的对数正态分布,它的参数是已知的。

import scipy

log_norm_obj = scipy.stats.lognorm([log_mu], shape=sigma)

我需要求解满足以下方程的 x:

x = (1 - log_norm_obj.cdf(x)) / log_norm_obj.pdf(x)

我如何使用 numpy/scipy 来做到这一点?谢谢!

最佳答案

您使用 scipy.optimize 。从 scipy 0.11 及更高版本开始,您可以使用新函数 minimizeminimize_scalar 。假设您的 x 是标量,下面是一些有关如何执行此操作的示例代码:

from scipy.optimize import minimize_scalar

def f(x):
    return (1 - log_norm_obj.cdf(x)) / log_norm_obj.pdf(x) - x

result = minimize_scalar(f)        
print result.x 
# this would print your result

上面使用Brent's method ,默认值。您还可以 Golden method ,或布伦特方法的有界版本。如果您的函数仅在给定域中定义或者您想要特定区间内的解决方案,则后者可能很有用。一个例子:

result = minimize_scalar(f, bounds=(0, 10.), method='bounded')

如果您的函数采用向量而不是标量,则可以使用 minimize 采取类似的方法。如果你的 scipy 版本早于 0.11,只需使用 fmin 的风格即可.

关于python - 如何使用 numpy/scipy 求解方程中已知函数的 x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943286/

相关文章:

python - Django 如何让干草堆与 django-hvad 一起工作

python - "invert"一个数组,即将 2d 索引列表转换为 1d 索引的 2d 数组

Python 相当于 R 的 seq_len、slice,以及在哪里?

r - 使用 R 进行因子分析

python - Django 初始化

python - Django - 使用 ManyToMany 保存表单集

python - 排除统一网格中的端点

perl - Perl 的更好的卡方检验?

mysql - 计算 Rails/MySQL 中值的分布

python - 为什么 asyncio 子进程的行为与创建的事件循环不同,除非你 set_event_loop?