擅长:python、mysql、java
<p>我想你应该加1,作为<a href="https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.log1p.html" rel="nofollow noreferrer" title="this numpy function">the numpy log1p description page</a>。
因为log(p+1)=0时p=0(而log(e-99)=-99),并且作为链接中的引号</p>
<blockquote>
<p>For real-valued input, log1p is accurate also for x so small that 1 + x == 1 in floating-point accuracy</p>
</blockquote>
<p>可以按如下方式修改代码,使您试图解决的问题更加合理:</p>
<pre><code>for i in range(rank):
for j in range(i + 1, len(spectrum)):
pa += log((spectrum[i] - spectrum[j]) *
(1. / spectrum_[j] - 1. / spectrum_[i]) + 1) + log(n_samples + 1)
ll = pu + pl + pv + pp - pa / 2. - rank * log(n_samples + 1) / 2
</code></pre>