<p>问题是:</p>
<pre><code>import scipy.stats
#expect(func, loc=0, scale=1, lb=None, ub=None, conditional=False, **kwds)
for i in range(26, 55):
print scipy.stats.norm.expect(loc=i,scale=1),
</code></pre>
<p>输出:</p>
^{pr2}$
<p>对于更大的<code>scale</code>(标准偏差),行为的“截止点”会进一步向外移动,正如您所预期的那样。在</p>
<p><code>problem can be 'fixed' by setting the lower and upper bounds explicitly</code>,如下所示:</p>
<pre><code>import numpy as np
for i in np.arange(5,100,5):
print i,scipy.stats.norm.expect(loc=55,lb=-i,ub=i,scale=1)
</code></pre>
<p>输出:</p>
<pre><code>5 0.0
10 0.0
15 0.0
20 2.01210143973e-267
25 1.05364770562e-196
30 7.87517644756e-137
35 8.61623210583e-88
40 1.40277331283e-49
45 3.46495136419e-22
50 1.42791169386e-05
55 27.1010577196
60 54.9999827474
65 55.0
70 55.0
75 55.0
80 55.0
85 55.0
90 55.0
95 55.0
</code></pre>
<p>但一定有一个微妙的缺陷。如果你看一下<a href="http://www.statsmodels.org/stable/_modules/scipy/stats/_distn_infrastructure.html" rel="nofollow">source</a>(参见类<code>rv_continous</code>的init</strong>方法),你会发现默认限制是作为Numpy的“inf”导入的。
如果以+/-np.inf公司你会得到与OP描述的相同的行为:</p>
<pre><code>for i in np.arange(5,60,5):
print i,scipy.stats.norm.expect(loc=i,lb=-np.inf,ub=np.inf,scale=1)
</code></pre>
<p>输出:</p>
<pre><code>5 5.0
10 10.0
15 15.0
20 20.0
25 25.0000000007
30 30.0
35 35.0
40 1.57463854604e-26
45 1.03158350625e-56
50 9.38568238273e-98
55 3.90968763333e-108
</code></pre>
<p>还请注意,在<a href="http://www.statsmodels.org/stable/_modules/scipy/stats/_distn_infrastructure.html" rel="nofollow">source</a>中的<code>expect</code>的定义中,集成警告被静音:</p>
<pre><code> # Silence floating point warnings from integration.
olderr = np.seterr(all='ignore')
vals = integrate.quad(fun, lb, ub, **kwds)[0] / invfac
</code></pre>
<p>问题的根源很可能在于<code>integrate.quad</code>如何处理给定为+/-<code>np.inf</code>的限制。实际的<a href="https://github.com/scipy/scipy/blob/master/scipy/integrate/quadpack/dqagie.f" rel="nofollow">source for the integration is in Fortran</a>,但对无限区间的数值积分是如何进行的(映射到有限的范围,就像黎曼球的情况一样)在<a href="https://en.wikipedia.org/wiki/Numerical_integration#Integrals_over_infinite_intervals" rel="nofollow">Wikipedia</a>中给出。在</p>