Я пытаюсь интерполировать некоторые данные для построения графика. Например, учитывая 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' в функцию генератора и выполнять внутренний продукт построчно, но я не думаю, что это сильно ускорит мой код, пока я не начну подкачивать данные в память и из нее.
Заранее спасибо за ваши предложения!
sinc()
. docs.scipy.org/doc/numpy/reference/generated/ numpy.sinc.html - person endolith   schedule 21.09.2011