我的方法是生成一个 N*10*N 的矩阵,并计算原始向量和我生成的矩阵的内积,得到一个 1*10*N 的向量。我已经解决了我想要使用的插值数学问题,但我的代码非常慢。我对Python还很陌生,所以我希望这里的一些专家能给我一些加速代码的建议。
我认为问题的一部分是生成矩阵需要对以下函数进行10*N^2次调用:
def sinc(x):
import math
try:
return math.sin(math.pi * x) / (math.pi * x)
except ZeroDivisionError:
return 1.0
这个理论来自采样理论。基本上,我正在尝试从其样本中重新创建信号,并将其上采样到更高的频率。
该矩阵由以下内容生成:
def resampleMatrix(Tso, Tsf, o, f):
from numpy import array as npar
retval = []
for i in range(f):
retval.append([sinc((Tsf*i - Tso*j)/Tso) for j in range(o)])
return npar(retval)
我正在考虑将任务分成更小的部分,因为我不喜欢在内存中保存N^2矩阵的想法。我可能可以将'resampleMatrix'变成生成器函数,并逐行执行内积,但我认为在开始对内存进行分页之前,这不会显著加快我的代码速度。
提前感谢您的建议!
sinc()
函数。http://docs.scipy.org/doc/numpy/reference/generated/numpy.sinc.html - endolith