Hallo allerseits,
ich komm nicht so ganz klar mit der Interpolations API von numpy. Ich hab eine Liste von Tupeln gegeben, die folgende Form haben: (zeitpunkt, wert). Dabei ist der Wert ein numpy array.
Soweit so gut. Auf der Seite sind zwar viele Beispiele: http://docs.scipy.org/doc/scipy/referen ... olate.html aber hier wird immer eine Ausgangsfunktion zugrunde gelegt, die ich bei mir nicht habe. Lineare Interpolation habe ich schon von Hand Implementiert, aber warum das Rad neu erfinden? Überseh ich da was in der API? Später will ich kubische/splin Interpolation auch einbauen.
Grüße,
anogayales
Werte auf verschiedene Art und Weise interpolieren
Und wo ist Dein Problem? Die von Dir verlinkte Doc zeigt doch genau das Beispiel, daß Du erfragst? (Allerdings würde ich aus Bequemlichkeit meine Daten eher so beschreiben wie in den Docs und nicht wie Du gerade andeutest: Listen von Tuplen von Arrays sind nicht direkt als numpy.ndarray zu verstehen oder dort hinein zu konvertieren.)
Ggf. zeige doch mal Code.
Gruß,
Christian
Ggf. zeige doch mal Code.
Gruß,
Christian
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
So, ich hab mich ein bisschen eingearbeitet, bin auf folgendes gekommen. Mit den extrahierten Daten:
Leider bekomme ich
Was mache ich falsch? Muss ich eine andere Achse definieren?
Grüße,
anogayales
Code: Alles auswählen
x = [1,20,80,200]
y = [numpy.array([[randint(0,100), randint(0,100), randint(0,100)]]) for _ in range(len(x))]
f = interp1d(x,y, kind="quadratic", fill_value=0)
Code: Alles auswählen
File "C:\Python27\lib\site-packages\scipy\interpolate\interpolate.py", line 480, in _dot0
return dot(a, b.transpose(axes))
ValueError: objects are not aligned
Grüße,
anogayales
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
Aus der Doku:
Also sind Arrays nicht so ganz falsch.y : array_like
A N-D array of real values. The length of `y` along the interpolation
axis must be equal to the length of `x`.
Ja, das nicht. Doch wie Dein Zitat schon sagt: Entlang der zu interpolierenden Achse müssen die Dimensionen auch stimmen. Du gibst aber unterschiedlich viele vor.
Also, ich verstehe nicht ganz, was Du machen möchtest:
- Entweder für jeden Zeitpunkt xi wurden mehrere Werte yi,j...n gemessen. In dem Fall kann man ja einfach für jedes Tupel (mathematisches Tupel) yi,j...n den Mittelwert berechnen und auf dieser Basis interpolieren. Die Unsicherheit der Interpolation ist dann (meist) gleichzusetzen mit der Interpolation der Fehler (z. B. Standardfehler des Mittelwertes).
- Oder Du hast in Wahrheit "flache" multivariate Daten. Dann könntest Du das griddata-Beispiel nehmen und mit einem "flachen" grid arbeiten, das 1xN Dimensionen hat mit N = len(x). Hierbei allerdings bin ich mir nicht klar, wie physikalisch sinnvoll diese Auffassung ist. Da solltest Du entweder hier nochmal mehr erklären oder Dich an einen Betreuer bei Dir vor Ort wenden.
HTH
Christian
Also, ich verstehe nicht ganz, was Du machen möchtest:
- Entweder für jeden Zeitpunkt xi wurden mehrere Werte yi,j...n gemessen. In dem Fall kann man ja einfach für jedes Tupel (mathematisches Tupel) yi,j...n den Mittelwert berechnen und auf dieser Basis interpolieren. Die Unsicherheit der Interpolation ist dann (meist) gleichzusetzen mit der Interpolation der Fehler (z. B. Standardfehler des Mittelwertes).
- Oder Du hast in Wahrheit "flache" multivariate Daten. Dann könntest Du das griddata-Beispiel nehmen und mit einem "flachen" grid arbeiten, das 1xN Dimensionen hat mit N = len(x). Hierbei allerdings bin ich mir nicht klar, wie physikalisch sinnvoll diese Auffassung ist. Da solltest Du entweder hier nochmal mehr erklären oder Dich an einen Betreuer bei Dir vor Ort wenden.
HTH
Christian
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
Es geht mir darum in einem Animationsprogramm einen 3-Komponentigen Vektor, wie Position zu interpolieren. Hab jetzt mal eine andere Achse gewählt und es scheint damit zu klappen.
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
So ganz komm ich mit dem Beispiel nicht klar. Unter "Interpolation of an N-D curve":
Kleines Testskript geschrieben, da meine Daten mehr oder weniger so vorliegen:Die angepasste Kurve passt, leider überhaupt nicht zu meiner ursprünglichen. Die Doku: http://docs.scipy.org/doc/scipy/referen ... lprep.html ist da leider auch nicht sonderlich hilfreich. Es ist erstmal absicht, dass die Daten eindimensional vorliegen.
Grüße,
anogayales
Kleines Testskript geschrieben, da meine Daten mehr oder weniger so vorliegen:
Code: Alles auswählen
from numpy import arange, cos, linspace, pi, sin, random
from scipy.interpolate import splprep, splev
x = [1,20,90,120,125]
y = [0,50,0,45,80]
# spline parameters
s=3.0 # smoothness parameter
k=2 # spline order
nest=-1 # estimate of number of knots needed (-1 = maximal)
# find the knot points
tckp,u = splprep([y,x],s=s,k=k,nest=-1)
# evaluate spline, including interpolated points
xnew,ynew = splev(linspace(1,125,125),tckp)
import pylab
data,=pylab.plot(x,y,'bo-',label='data')
fit,=pylab.plot(xnew,ynew,'r-',label='fit')
pylab.show()
Grüße,
anogayales
Hm, abgesehen davon, dass es scheint, als ob Du x und y in splprep vertauscht hast - kann aber auch Absicht sein - finde ich das jetzt auch nicht besonders logisch. Eigentlich hatte ich mit meinem Link auf die map_coordinates abgezielt - aber das ist auch nicht dasselbe. Das ist u. U. der Moment, wo man besser auf der Mailingliste nachfragt - allerdings solltest Du da direkt sagen, was Du machen willst.
Sorry
Christian
Sorry
Christian