resampling, Interpolation matrix

Ich versuche zu interpolieren einige Daten für den Zweck des Zeichnens. Zum Beispiel, gegeben die N Daten-Punkte, ich möchte in der Lage sein zum generieren eines "smooth" - plot, der aus 10*N oder so interpolierten Datenpunkte.

Mein Ansatz ist die Erzeugung einer N-by-10 - *N-matrix und berechnen Sie das innere Produkt der ursprünglichen Vektor und die matrix I erzeugt, woraus sich ein 1-by-10 - *N-Vektor. Ich habe bereits ausgearbeitet, die Mathematik, die ich verwenden möchten, für die interpolation, aber mein code ist ziemlich langsam. Ich bin Recht neu in Python, also ich habe die Hoffnung, dass einige der Experten hier können mir einige Ideen, wie ich versuchen kann, um speed up my code.

Ich denke, Teil des Problems ist, dass die Generierung der matrix erfordert 10*N^2 ruft die folgende Funktion:

def sinc(x):
    import math
    try:
        return math.sin(math.pi * x) / (math.pi * x)
    except ZeroDivisionError:
        return 1.0

(Diese kommt von sampling-Theorie. Im Grunde genommen bin ich versucht, neu zu erstellen ein signal von seiner Proben, und upsample es zu einer höheren Frequenz.)

Die matrix wird erzeugt, indem die folgenden:

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)

Ich überlege mir, brechen Sie die Aufgabe in kleinere Stücke, weil ich nicht wie die Idee, ein N^2 matrix sitzen im Speicher. Ich könnte wahrscheinlich machen 'resampleMatrix' in eine generator-Funktion und machen das innere Produkt Zeile für Zeile, aber ich glaube nicht, dass beschleunigt mein code viel, bis ich starten paging Sachen in und aus dem Speicher.

Vielen Dank im Voraus für Eure Vorschläge!

  • ganz abgesehen von dem, was Sie zu tun versuchen, mit Ihrem code, die Idee, dass man nur interpolieren extra-Punkte mit ist keine generative Modell der Daten ist falsch. wenn Sie dies tun wollen in jeder Art von statistisch prinzipiellen Weg, die Sie brauchen, um eine Art regression. siehe en.wikipedia.org/wiki/Generative_model
  • Es sieht aus wie Phil will nur noch eine interpolation für das zeichnen. Solange die interpolierten Punkte werden nicht für andere Zwecke verwendet, sehe ich nicht, warum würde man brauchen, ein generatives Modell
  • Irgendein besonderer Grund, warum, den Sie verwenden möchten sinc-interpolation gegeben, dass es eine O(N^2) Algorithmus und andere Methoden, wie beispielsweise kubische spline sind nur O(N)?
  • Das Modell der Daten ist, dass es abgetastet wurde nach der en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem. Können Sie wiederherstellen, genau durch die Verwendung von sinc-Funktionen.
  • numpy hat bereits eine sinc() - Funktion, durch die Art und Weise. docs.scipy.org/doc/numpy/reference/generated/numpy.sinc.html
InformationsquelleAutor Phil | 2009-12-05
Schreibe einen Kommentar