擅长:python、mysql、java
<p>{{{1}你应该用哪个函数来代替第一步:</p>
<pre><code>import numpy as np
import math
x=abs(randn(1000000))
#unsing numpy
start = time.time()
for i in x:
np.log2(i)
print "Runtime: %f s" % (time.time()-start)
>>> Runtime: 3.653858 s
#using math.log
start = time.time()
for i in x:
math.log(i,2) # use log with base 2
print "Runtime: %f s" % (time.time()-start)
>>> Runtime: 0.692702 s
</code></pre>
<p>问题是<code>math.log</code>将在遇到的每一个<code>0</code>时产生一个错误。您可以通过从直方图输出中删除所有<code>0</code>来绕过此问题。这有几个优点:1)数学。日志不会失败,2)根据您的映像,<code>math.log</code>将被调用更少,这将导致更快的代码。您可以删除零,因为<code>0*log(0)</code>变成{<cd4>},即使<code>log(0)</code>将返回一个值。所以,乘积不会加到熵和上。在</p>
<p>我在一些音频处理方面也遇到了同样的问题。不幸的是,我不能改进它超过以上。如果你能找到更好的解决办法,我会很高兴你能把它贴在这里。在</p>