Mit scipy.interpolieren.interpn zur Interpolation in einem N-Dimensionalen array

Angenommen ich habe Daten, die hängt auf 4 Variablen: a, b, c und d.... Ich will interpolieren, um wieder eine 2D-array zurück, das entspricht einem einzelnen Wert von a und b, und ein array von Werten für c und d.... Aber Die array-Größe muss nicht gleich sein. Um genau zu sein, meine Daten stammen aus einem transistor-simulation. Der Strom hängt von 4 Variablen, die hier. Ich möchte zum Plotten eine parametrische variation. Die Anzahl der Punkte auf den parameter ist viel weniger als die Anzahl der Punkte für die horizontale Achse.

import numpy as np
from scipy.interpolate import interpn
arr = np.random.random((4,4,4,4))
x1 = np.array([0, 1, 2, 3])
x2 = np.array([0, 10, 20, 30])
x3 = np.array([0, 10, 20, 30])
x4 = np.array([0, .1, .2, .30])
points = (x1, x2, x3, x4)

Folgende Werke:

xi = (0.1, 9, np.transpose(np.linspace(0, 30, 4)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)

und so tut dieses:

xi = (0.1, 9, 24, np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)

aber nicht dieses:

xi = (0.1, 9, np.transpose(np.linspace(0, 30, 3)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)

Wie Sie sehen können, im letzten Fall ist die Größe der letzten beiden arrays in xi ist anders. Ist diese Art von Funktionalität nicht unterstützt, die von scipy oder bin ich mit interpn falsch? Ich brauche diese erstellen Sie einen plot, wo eine der xi's ist ein parameter, während die andere ist die horizontale Achse.

  • Sieht aus wie Sie sind nicht mit interpn richtig... ich gehe davon aus, dass points stellt Ihr Stromnetz, d.h., die "sampling points", die in jeder Ihrer vier Dimensionen für die Werte, die Sie kennen. arr hält diese bekannten Werte. Aber zufällig heißt, es ist hart zu überprüfen, ob oder nicht die interpolation arbeitet. Versuchen Sie, Sie alle gleich sind, stattdessen, oder noch besser, linear in jedem der vier Dimensionen. xi sollten die Koordinaten der Punkte, an denen Sie wollen, um zu wissen, die Werte von arr. xi sollte ein array mit k Zeilen, für die k Punkte, und 4 Spalten (4D-Daten).
  • Dank Praveen! Meine Frage jedoch ist folgende. Angenommen ich habe Daten, die hängt auf 4 Variablen: a, b, c, d.... Ich will interpolieren, um wieder eine 2D-array zurück, das entspricht einem einzelnen Wert von a und b, und ein array von Werten für c und d.... Aber Die array-Größe muss nicht gleich sein. Um genau zu sein, meine Daten stammen aus einem transistor-simulation. Der Strom hängt von 4 Variablen, die hier. Ich möchte zum Plotten eine parametrische variation. Die Anzahl der Punkte auf den parameter ist viel weniger als die Anzahl der Punkte für die horizontale Achse.
  • Beim nächsten mal einfach Bearbeiten Sie Ihre Frage direkt, anstelle der Zugabe eine Menge von Informationen in einem Kommentar
  • By the way, beachten Sie, dass np.transpose(np.linspace(0, 30, 3)) macht es nicht zu einem Spalten-Vektor. Lesen Sie über die 1D-arrays in numpy. Sie müssen sich vorstellen, eine neue dimension, so verwenden Sie np.linspace(0, 30, 3)[:, np.newaxis] statt. Aber in diesem Fall, Sie brauchen nicht dieses, wie ich in meiner Antwort.
  • Ugh der transpose war ein Fehler. Ich war Einmischung, um mit dem code, um zu sehen, was funktionieren würde und es schlich sich in diesem post. Sorry!
InformationsquelleAutor Ashwith Rego | 2016-09-05
Schreibe einen Kommentar