[Python scipy] Upscaling / Downscaling von 2D-Daten

Vokabelbuch. Viel nachdrucken, weil es schwierig ist, jedes Mal zu suchen. Es gibt eine ursprüngliche URL.

Manchmal wird es verwirrend:

--Opscale: Grobe Auflösung --Downscale: Feinere Auflösung

Die Wertinterpolation ist hier zusammengefasst: [SciPy.org: Interpolation (scipy.interpolate)] (https://docs.scipy.org/doc/scipy-0.14.0/reference/interpolate.html)

Von diesen diejenige, die häufig für Upscale / Downscale verwendet wird

Beispiel mit RegularGridInterpolator

[stackoverflow: Scipy interpolation with masked data?] (https://stackoverflow.com/questions/35807321/scipy-interpolation-with-masked-data) Ist leicht zu verstehen. Im Fall von MaskedArray ist es schneller, die Maske selbst zu konvertieren (anstatt den maskierten Teil mit np.nan zu füllen).

import numpy as np
from scipy import interpolate

def conv_resol(arr, newshape, *args, **kwargs):
    '''
    Args:
        arr [2d ndarray or MaskedArray]
        newshape [tuple of int]
        *args, **kwargs: for interpolate.RegularGridInterpolator
    '''
    nx0, ny0 = arr.shape
    nx1, ny1 = newshape
    x0 = np.linspace(0, 1, nx0)
    y0 = np.linspace(0, 1, ny0)
    x1 = np.linspace(0, 1, nx1)
    y1 = np.linspace(0, 1, ny1)
    x1, y1 = np.meshgrid(x1, y1) # x1 [ny1,nx1], y1 [ny1, nx1]
    xy1 = np.array((x1, y1)).T   # xy1 [nx1, ny1, 2]
    arr1 = interpolate.RegularGridInterpolator((x0, y0), arr, *args, **kwargs)(xy1)
    if isinstance(arr, np.ma.MaskedArray):
        mask1 = interpolate.RegularGridInterpolator((x0, y0), arr.mask.astype('float'), *args, **kwargs)(xy1) > 0.0
        return np.ma.masked_array(arr1, mask=mask1)
    return arr1

Prüfung

import matplotlib.pyplot as plt


nx0, ny0 = 10, 20
arr0 = np.arange(nx0 * ny0).reshape(nx0, ny0) * (1.0 / (nx0 * ny0))

nx1, ny1 = 5, 10
arr1 = conv_resol(arr0, (nx1, ny1))

nx2, ny2 = 20, 40
arr2 = conv_resol(arr0, (nx2, ny2))

plt.figure(figsize=(12,8))
plt.subplot(2,2,1)
plt.imshow(arr0, vmin=0.0, vmax=1.0)
plt.subplot(2,2,3)
plt.imshow(arr1, vmin=0.0, vmax=1.0)
plt.subplot(2,2,4)
plt.imshow(arr2, vmin=0.0, vmax=1.0)

image.png

Recommended Posts

[Python scipy] Upscaling / Downscaling von 2D-Daten
Datenanalyse Python
[Python] Daten lesen
Erstellen Sie ein 3D-Streudiagramm mit SciPy + matplotlib (Python)
Datenanalyse mit Python 2
Python-Datenvisualisierungsbibliotheken
Berechnen Sie 2D IDCT ~ Python
Datenanalyse Übersicht Python
Datenbereinigung mit Python
Python: Diagramm der zweidimensionalen Datenverteilung (Schätzung der Kerneldichte)
Python-Datenanalysevorlage
[Python] Numpy Daten sortieren
Daten mit Scipy normieren
Datenanalyse mit Python
Mit Python erstellte Beispieldaten
Mein Python-Datenanalyse-Container
Behandeln Sie Umgebungsdaten in Python
Datenstruktur Python Push Pop
Python für die Datenanalyse Kapitel 4
Exportieren Sie 3D-Daten aus QGIS
Zeigen Sie UTM-30LX-Daten in Python an
Erstellen Sie ein 3D-GIF mit Python3
Holen Sie sich Youtube-Daten mit Python
Python: 3D-Array-Bild (numpy.array)
Python> Umgang mit 2D-Arrays
Meine Python-Datenanalyseumgebung
Python-Anwendung: Datenvisualisierung # 2: matplotlib
Lernnotizen zur Python-Datenanalyse
Python für die Datenanalyse Kapitel 2
AtCoder ABC 182 Python (A ~ D)
Konvertierung von Bilddatentypen [Python]
Datenanalyse mit Python-Pandas
Zweidimensionale Python-Array-Falle [Kopie des Arrays]
Python> Tupel> Daten, Adresse = s.recvfrom (10000)
Python für die Datenanalyse Kapitel 3
Lesen von JSON-Daten mit Python
[Python] [3D-Liniendiagramm] Mehrere Daten in einem Diagramm, Achsenwerte in Zeichen