擅长:python、mysql、java
<p>你的问题并不完全清楚,你在尝试优化你发布的代码,对吧?</p>
<p>像这样重新编写sinc会大大加快速度。此实现避免检查每次调用都导入数学模块,不执行三次属性访问,并用条件表达式替换异常处理:</p>
<pre><code>from math import sin, pi
def sinc(x):
return (sin(pi * x) / (pi * x)) if x != 0 else 1.0
</code></pre>
<p>也可以通过直接创建numpy.array(而不是从列表列表中)来避免创建两次矩阵(并在内存中并行保存两次):</p>
<pre><code>def resampleMatrix(Tso, Tsf, o, f):
retval = numpy.zeros((f, o))
for i in xrange(f):
for j in xrange(o):
retval[i][j] = sinc((Tsf*i - Tso*j)/Tso)
return retval
</code></pre>
<p>(在Python3.0及更高版本中将xrange替换为range)</p>
<p>最后,您可以使用numpy.arange创建行,并在每一行甚至整个矩阵上调用numpy.sinc:</p>
<pre><code>def resampleMatrix(Tso, Tsf, o, f):
retval = numpy.zeros((f, o))
for i in xrange(f):
retval[i] = numpy.arange(Tsf*i / Tso, Tsf*i / Tso - o, -1.0)
return numpy.sinc(retval)
</code></pre>
<p>这应该比最初的实现快得多。尝试这些想法的不同组合,并测试它们的性能,看看哪种效果最好!</p>