2017-02-16 2 views
2

Ich habe eine Menge von Daten (in 2D-Numpy-Arrays gespeichert), die Simulationen für ein und dasselbe Problem darstellen. Jede Simulation stammt jedoch aus einem anderen Modell, das zu unterschiedlichen Auflösungen führt. Zum Beispiel sind diese einige der Simulationen Größen:Ändern der Datenauflösung in Python

  1. 1159 x 1367
  2. 144 x 157
  3. 72 x 82
  4. 446 x 500
  5. 135 x 151

Was ich tun möchte, ist, sie alle in die gleiche Auflösung zu konvertieren, zum Beispiel 144 x 157. Ich glaube, ich muss eine Interpolation durchführen, aber ich bin mir nicht sicher, welche Methode in Python verwendet werden soll.

Ich habe über diese zu lesen:

  1. scipy.interpolate.griddata
  2. scipy.ndimage.interpolation.zoom.html
  3. scipy.interpolate.RegularGridInterpolator.html
  4. scipy.ndimage.interpolation.map_coordinates.html

Die (3) und (4) scheint am besten die passen Problem, jedoch bin ich mir nicht sicher, wie sie eine neue gerasterte (2D) Daten, Witz h eine angegebene Auflösung.

+0

Bedecken alle Ihre Daten den gleichen Koordinatenbereich? Mit anderen Worten, sind alle Messungen zwischen (zum Beispiel) 0 bis 3 in x und 0 bis 10 in y? – James

+0

Ja, sie alle decken die gleiche Region ab, aber in unterschiedlichen Auflösungen. – pceccon

+0

Diese Simulationen sind die Daten rauschfrei? –

Antwort

0

Es stellt sich heraus, dass ich es scipy.interpolate.RegularGridInterpolator.html mit lösen könnte:

import numpy as np 
import pylab as plt 

from scipy.interpolate import RegularGridInterpolator 

def regrid(data, out_x, out_y): 
    m = max(data.shape[0], data.shape[1]) 
    y = np.linspace(0, 1.0/m, data.shape[0]) 
    x = np.linspace(0, 1.0/m, data.shape[1]) 
    interpolating_function = RegularGridInterpolator((y, x), data) 

    yv, xv = np.meshgrid(np.linspace(0, 1.0/m, out_y), np.linspace(0, 1.0/m, out_x)) 

    return interpolating_function((xv, yv)) 

Eingang:

enter image description here

Ausgang:

enter image description here

Verwandte Themen