2017-08-17 2 views
0

Ich frage mich, wie ich den interpolierten Wert eines 3D-Arrays erhalten könnte. Ich versuche, den Wert bei zum Beispiel Position: (1.4, 2.3, 4.2) eines 3d-Arrays zu erhalten. Wie kann ich den interpolierten Wert erhalten?So erhalten Sie interpolierte Array-Werte in numpy/scipy

counterX = 1.5 
counterY = 1.5 
counterZ = 1.5 

for x in range(0, length) 
    for y in range(0, length) 
     for z in range(0, length) 
      value = img[counterX, counterY, counterZ] 
     counterZ = 0 
    counterY = 0 

counterX, counterY und counterZ sind Float-Werte anstelle von Ganzzahlen. Aber ich kann sie nicht int (...) da meine Ergebnisse sehr genau sein müssen. Daher dachte ich, Interpolation wäre die beste Lösung.

Antwort

1

Gehen Sie einfach für trilineare Interpolation, wie hier beschrieben: https://en.wikipedia.org/wiki/Trilinear_interpolation

Für Ihr Beispiel hierfür wäre:

C00 = (1,2,4)*0.6 + (2,2,4)*0.4 
C01 = (1,3,4)*0.6 + (2,3,4)*0.4 
C10 = (1,2,5)*0.6 + (2,2,5)*0.4 
C11 = (1,3,5)*0.6 + (2,3,5)*0.4 

C0 = C00*0.8 + C10*0.2 
C1 = C01*0.8 + C11*0.2 

C = C0*0.7 + C1*0.3 
0

Ich bin mir nicht sicher, was genau dein Problem ist.

Möchten Sie ein interpoliertes Array aus einigen beobachteten Werten erstellen? Dann würde ich persönlich empfehlen, ein Kriging-Modell zu verwenden, pyKriging scheint das zu tun, aber ich habe es nie persönlich benutzt.

Dann könnten Sie eine Funktion erstellen (unter Verwendung des durch kriging erstellten Vorhersagemodells), indem Sie 3 Argumente counterX, counterY und counterZ nehmen und nur die Vorhersage an beliebigen Positionen auswerten.