- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 scipy.stats
(python) 中的 multinominal.pmf
函数。
当我在输入中所有概率都大于零的情况下使用此函数时,它工作正常。问题是当我想在其中一个概率为零时使用该函数。
下面的例子说明了我的意思:
In [18]: multinomial.pmf([3, 3, 0], 6, [1/3.0, 1/3.0, 1/3.0])
Out[18]: 0.027434842249657095
In [19]: multinomial.pmf([3, 3, 0], 6, [2/3.0, 1/3.0, 0])
Out[19]: nan
可以看出,在所有概率 > 0 的第一次使用该函数没有问题。然而,当我将其中一个概率更改为零时,函数返回 nan
,即使函数应该返回 0.21948
。
有没有一种方法(在 python 中)可以在其中一个概率为零时计算 pmf?另一种可以处理它的方法,或者解决此功能的方法。
附加信息
示例中的函数应该返回的值是我在 matlab 中使用 mnpdf 函数计算的。然而,由于我的其余代码是用 python 编写的,所以我更喜欢找到一种在 python 中计算它的方法。
最佳答案
好地方!这是 scipy 中的错误。源代码可以找到here .
3031 到 3051 行:
def pmf(self, x, n, p):
return np.exp(self.logpmf(x, n, p))
第 2997 到 3017 行:
def logpmf(self, x, n, p):
n, p, npcond = self._process_parameters(n, p)
第 2939 行到 2958 行:
def _process_parameters(self, n, p):
p = np.array(p, dtype=np.float64, copy=True)
p[...,-1] = 1. - p[...,:-1].sum(axis=-1)
# true for bad p
pcond = np.any(p <= 0, axis=-1) # <- Here is why!!!
pcond |= np.any(p > 1, axis=-1)
n = np.array(n, dtype=np.int, copy=True)
# true for bad n
ncond = n <= 0
return n, p, ncond | pcond
行pcond = np.any(p <= 0, axis=-1)
结果 pcond
正在true
如果 p
有任何值是 <= 0。
然后在logpmf
第 3029 行:
return self._checkresult(result, npcond_, np.NAN)
结果为 logpmf
和 pmf
返回 nan
!
请注意,实际结果计算正确(第 3020 行,2994-2995 行):
result = self._logpmf(x, n, p)
def _logpmf(self, x, n, p):
return gammaln(n+1) + np.sum(xlogy(x, p) - gammaln(x+1), axis=-1)
你的值(value)观:
import numpy as np
from scipy.special import xlogy, gammaln
x = np.array([3, 3, 0])
n = 6
p = np.array([2/3.0, 1/3.0, 0])
result = np.exp(gammaln(n+1) + np.sum(xlogy(x, p) - gammaln(x+1), axis=-1))
print(result)
>>>0.219478737997
关于python - scipy 多项式 pmf 返回 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47894446/
是否有任何函数或库可以像绘制样本的概率密度函数一样帮助我绘制样本的概率质量函数? 例如,使用 pandas,绘制 PDF 就像调用一样简单: sample.plot(kind="density") 如
我的用例是在小于 10 的所有点上评估 Poisson pmf,我会使用不同的 lambda 多次调用这样的函数。无法提前知道 lambda,因此我无法矢量化 lambda。 我从某个地方听说了一个
我试图在 Python 中根据某种丑陋的分布生成随机变量。我有一个 PMF 的显式表达式,但它涉及一些产品,这使得获取和反转 CDF 变得不愉快(有关 PMF 的显式形式,请参见下面的代码)。 本质上
是否有一个库可以帮助我在 python 中巧妙地绘制样本的概率质量函数,如下所示: 最佳答案 通过 matplotlib.pyplot 的主干模块 matplotlib.pyplot.stem(*ar
我正在使用 AppEngine 将我的 api 从 Python 移植到 Java。我决定使用JDO。我已经创建了模型,现在正在尝试创建一个持久保存到数据存储区的新对象。 我按照此处的说明进行操作:
我在 pandas 数据框中有以下数据集。我希望提取每个 user_id 的 trajectory 中每个项目的计数,计算/返回每个项目的概率质量函数 (pmf)在列表中,并通过 pmf 返回前 3
我正在尝试使用 scipy.stats (python) 中的 multinominal.pmf 函数。 当我在输入中所有概率都大于零的情况下使用此函数时,它工作正常。问题是当我想在其中一个概率为零时
假设一个黑盒随机数生成器在某个时间间隔内连续发出整数值(对于直接感兴趣的情况,[0, 255])。我想估计概率质量函数及其变化的一些度量,并且我想在新样本进入时定期更新这些估计,而不必存储到目前为止的
scipy/numpy 中是否有用于获取多项式的 PMF 的内置函数?我不确定 binom 是否以正确的方式概括,例如 # Attempt to define multinomial with n =
根据 App Engine 文档,PersistenceManagerFactory 只能在应用程序中创建一次。 它提供了这个示例: package guestbook; import javax.j
是否可以让scipy.stats.binom.pmf(x, n, p)返回试验次数(n),概率为,数字成功次数 (x) 和成功概率 (p) 已知吗? 示例问题: Alex 需要 throw 多少次才能
在下面的程序中,案例 1 尝试通过指向成员函数的指针使用默认参数。案例 2 尝试通过函数引用使用默认参数。案例 3 使用 operator() 中的默认参数。这里唯一有趣的断言是使用别名 can_ca
是否可以写一些f()采用类型的模板函数 T和指向签名成员函数的指针 void(T::*pmf)()作为(模板和/或函数)参数并返回 const char*指向成员函数的 __func__变量(或损坏的
我有一个联合概率质量函数数组,其形状例如 (1,2,3,4,5,6),我想计算概率表,以某些维度的值为条件(导出cpts),用于决策目的。 我现在想出的代码如下(输入是形式为 {'variable_1
我是一名优秀的程序员,十分优秀!