プロットする目的でいくつかのデータを補間しようとしています。たとえば、N個のデータポイントが与えられた場合、10*N程度の補間されたデータポイントで構成される「スムーズな」プロットを生成できるようにしたいと思います。
私のアプローチは、N x 10 * Nの行列を生成し、元のベクトルと生成した行列の内積を計算して、1 x 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'をジェネレーター関数にして、内積を行ごとに実行することもできますが、メモリのページングを開始するまで、コードの速度はそれほど向上しないと思います。
よろしくお願いします!