`ValueError: Ein Wert, der in x_new über den interpolationsbereich.` - welche anderen Gründe als nicht aufsteigende Werte?
Erhalte ich diesen Fehler in scipy interp1d Funktion. Normalerweise wird dieser Fehler generiert werden, wenn das x nicht streng monoton Steigend.
import scipy.interpolate as spi
def refine(coarsex,coarsey,step):
finex = np.arange(min(coarsex),max(coarsex)+step,step)
intfunc = spi.interp1d(coarsex, coarsey,axis=0)
finey = intfunc(finex)
return finex, finey
for num, tfile in enumerate(files):
tfile = tfile.dropna(how='any')
x = np.array(tfile['col1'])
y = np.array(tfile['col2'])
finex, finey = refine(x,y,0.01)
Den code korrekt ist, weil er erfolgreich gearbeitet 6 Daten-Dateien und warf den Fehler für den 7. Platz. Also muss es etwas falsch mit den Daten. Aber soweit ich das beurteilen kann, der Daten erhöhen den ganzen Weg nach unten.
Ich bin leider nicht die Bereitstellung ein Beispiel, denn ich bin nicht in der Lage, den Fehler zu reproduzieren, auf ein Beispiel.
Gibt es zwei Dinge, die mir helfen könnte:
- Einige brainstorming - die Daten sind in der Tat monoton
die Erhöhung, was könnte diesen Fehler verursachen? Ein weiterer Hinweis,
in Bezug auf die Dezimalstellen, konnte im diese Frage, aber ich denke,
meine Lösung (die min und max des x) ist robust genug, um es zu vermeiden. Oder
ist es nicht? - Ist es möglich (wie?) um den Rückgabewert von x_new und
es ist index, wenn das werfen derValueError: A value in x_new is above the interpolation range.
so dass ich tatsächlich sehen konnte, wo in der
Datei ist das problem?
UPDATE
Also das problem ist, dass aus irgendeinem Grund, max(finex)
ist größer als max(coarsex)
(man ist .x39 und den anderen ist .x4). Ich hoffte, dass die Rundung der ursprünglichen Werte auf 2 signifikante Ziffern würde das problem lösen, aber es ging nicht, es zeigt weniger Ziffern hat, aber zählt immer noch mit den nicht angezeigten. Was kann ich dagegen tun?
finex
im Vergleich zu der Reihe von coarsex
. Die Nachricht sagt mir, dass einige Wert finex
größer als jeder Wert coarsex
in einer region, die erfordern würde, dass eine extrapolation.wie konnte ein Wert von
finex
größer sein als die des coarsex
wenn es heißt, es sollte nur reichen, um den maximalen Wert von coarsex
? Oh, ich sehe, ich denke, es könnte passieren, wenn die step
größer ist als die Differenz zwischen dem maximum und dem zweiten maximalen Wert... Nein, warte, es kann nicht, weil der Schritt ist step
!InformationsquelleAutor durbachit | 2017-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit Scipy v. 0.17.0 oder höher, dann können Sie übergeben Sie
fill_value='extrapolieren'
zuspi.interp1d
, und es wird extrapolieren zu accomadate diese Werte von Ihr ist, liegen außerhalb des interpolationsbereich. So definieren Sie Ihre interpolation Funktion etwa so:intfunc = spi.interp1d(coarsex, coarsey,axis=0, fill_value="extrapolate")
Seien Sie jedoch vorgewarnt!
Je nachdem, was Ihre Daten aussieht und der Typ auf interpolation, die Sie durchführen, die hochgerechneten Werte können irreführend sein. Dies gilt insbesondere, wenn Sie laut oder nicht monotone Daten. In Ihrem Fall könnten Sie in Ordnung sein, weil Ihr x_new Wert ist nur etwas über Ihre interpolationsbereich.
Hier ist einfache demonstration, wie dieses feature funktioniert gut, aber geben auch zu fehlerhaften Ergebnissen führen.
Also die interpolierten Teil (in rot) funktionierte gut, aber der hochgerechnete Anteil deutlich nicht befolgen, die den ansonsten linearen trend in diesen Daten, weil der Lärm. So haben Sie ein gewisses Verständnis für Ihre Daten und gehen Sie mit Vorsicht.
InformationsquelleAutor saintsfan342000
Einen schnellen test Ihrer
finex
calc zeigt, dass es (immer?) wird in der Hochrechnung region.Wieder ist es ein quick-test, und möglicherweise fehlen einige kritische Schritt oder Wert.
Min coarse, min fine, max coarse, max fine 261.4134814 261.4134814 524.9398314 524.9434814
. Also versuchte ich Runde die Werte auf 2 signifikante stellen, aber es funktioniert immer noch nicht (ist es abgerundet nur im display, aber immer noch zählen mit mehr Ziffern? Bin ich wirklich fest auf dem dünnen Eis der geheimnisvollen Zahl von bits eines float?) ... wie man das umgehen kann?InformationsquelleAutor hpaulj