我正在尝试插入一些数据以进行绘图。例如,给定 N 个数据点,我希望能够生成一个由 10*N 左右的插值数据点组成的“平滑”图。
我的方法是生成一个 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”变成一个生成器函数并逐行执行内积,但我认为这不会大大加快我的代码速度,直到我开始将内容分页进出内存。
提前感谢您的建议!