Interpolieren Sie ganze Arrays komplexer Zahlen

Ich habe eine Reihe von zweidimensionalen np.arrays (alle von gleicher Größe), die komplexe Zahlen enthalten. Jeder von ihnen gehört zu einer Position in einem 4-dimensionalen Raum. Diese Positionen sind spärlich und unregelmäßig verteilt (genauer gesagt ein lateinischer Hyperwürfel). Ich möchte diese Daten auf andere Punkte im selben 4-dimensionalen Raum interpolieren.

Ich kann dies erfolgreich für einfache Zahlen tun, entweder mitsklearn.kriging(), scipy.interpolate.Rbf() (oder andere):

# arrayof co-ordinates: 2 4D sets
X = np.array([[1.0, 0.0, 0.0, 0.0],\
              [0.0, 1.0, 0.0, 0.0]])

# two numbers, one for each of the points above 
Y = np.array([1,\
              0])

# define the type of gaussian process I want
kriging = gp.GaussianProcess(theta0=1e-2, thetaL=1e-4, thetaU=4.0,\
            corr='linear', normalize=True, nugget=0.00001, optimizer='fmin_cobyla')

# train the model on the data
kmodel = kriging.fit(X,Y)

# interpolate
kmodel.predict(np.array([0.5, 0.5, 0.0, 0.0]))
# returns: array([ 0.5])

Wenn ich versuche, Arrays (oder nur komplexe Zahlen) als Daten zu verwenden, funktioniert dies nicht:

# two arrays of complex numbers, instead of the numbers 
Y = np.array([[1+1j, -1-1j],\
              [0+0j,  0+0j]])

kmodel = kriging.fit(X,Y)
# returns: ValueError: The number of features in X (X.shape[1] = 1) should match the sample size used for fit() which is 4.

Dies liegt auf der Hand, da der Docstring fürkriging.fit() gibt eindeutig an, dass ein Array von n Skalaren erforderlich ist, einer pro Element in der ersten Dimension von X.

Eine Lösung besteht darin, die Arrays in Y in einzelne Zahlen zu zerlegen, diese in Real- und Imaginärteile, diese jeweils getrennt zu interpolieren und dann wieder zusammenzusetzen. Ich kann dies mit der richtigen Kombination von Loops und etwas Kunstfertigkeit tun, aber es wäre schön, wenn es eine Methode gäbe (z. B. inscipy.interpolate), die anstelle von skalaren Werten ein ganzes np.array verarbeiten könnte.

Ich bin (noch) nicht auf einen bestimmten Algorithmus festgelegt, daher würde ich mich über jeden freuen, der Arrays komplexer Zahlen als zu interpolierende "Variable" verwenden kann. Da es - wie gesagt - nur wenige und unregelmäßige Punkte im Raum gibt (und kein Gitter, auf dem interpoliert werden muss), reicht eine einfache lineare Interpolation natürlich nicht aus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage