Sto provando a interpolare alcuni dati allo scopo di tracciare. Ad esempio, dati N punti di dati, mi piacerebbe essere in grado di generare un grafico "liscio", composto da 10 * N o punti di dati interpolati.ricampionamento, matrice interpolante
Il mio approccio è quello di generare una matrice N-by-10 * N e calcolare il prodotto interno del vettore originale e della matrice I generata, ottenendo un vettore 1-by-10 * N. Ho già elaborato i calcoli che mi piacerebbe utilizzare per l'interpolazione, ma il mio codice è piuttosto lento. Sono abbastanza nuovo in Python, quindi spero che alcuni degli esperti qui possano darmi qualche idea su come posso provare ad accelerare il mio codice.
Credo parte del problema è che la generazione della matrice richiede 10 * N^2 chiamate alla seguente funzione:.
def sinc(x):
import math
try:
return math.sin(math.pi * x)/(math.pi * x)
except ZeroDivisionError:
return 1.0
(Questo comes from sampling theory Essenzialmente, sto cercando di ricreare un segnale dal suo . campioni, e upsample ad una frequenza superiore)
la matrice viene generato dal seguente:
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)
sto considerando rompere il compito in a pezzi più piccoli perché non mi piace l'idea di una matrice N^2 seduta nella memoria. Probabilmente potrei fare "resampleMatrix" in una funzione di generatore e fare il prodotto interno riga per riga, ma non credo che questo acceleri il mio codice molto prima di iniziare a fare il paging dentro e fuori dalla memoria.
Grazie in anticipo per i vostri suggerimenti!
completamente a parte quello che stai cercando di fare con il tuo codice, l'idea che puoi semplicemente interpolare punti extra senza alcun modello generativo dei dati è sbagliata. se vuoi farlo in qualsiasi tipo di metodo statisticamente basato sui principi, devi eseguire una sorta di regressione. vedi http://en.wikipedia.org/wiki/Generative_model – twolfe18
Sembra che Phil voglia solo usare l'interpolazione per la stampa. Finché i punti interpolati non vengono utilizzati per un altro scopo, non vedo perché uno avrebbe bisogno di un modello generativo. –
@Phil: Qualsiasi motivo particolare per cui si desidera utilizzare l'interpolazione sinc, dato che è un O (N^2) l'algoritmo e altri metodi come la spline cubica sono solo O (N)? –