[Python scipy] Augmentation / réduction de l'échelle des données 2D

Livre de vocabulaire. Réimprimer beaucoup car il est difficile de rechercher à chaque fois. Il existe une URL d'origine.

Parfois, cela devient déroutant:

--Upscale: résolution grossière --Downscale: résolution plus fine

L'interpolation des valeurs est résumée ici: [SciPy.org: Interpolation (scipy.interpolate)] (https://docs.scipy.org/doc/scipy-0.14.0/reference/interpolate.html)

Parmi ceux-ci, celui qui est souvent utilisé pour le haut de gamme / le bas de gamme

Exemple d'utilisation de RegularGridInterpolator

[stackoverflow: Scipy interpolation with masked data?] (https://stackoverflow.com/questions/35807321/scipy-interpolation-with-masked-data) Est facile à comprendre. Dans le cas de MaskedArray, il est plus rapide de convertir le masque lui-même (plutôt que de remplir la partie masquée avec np.nan).

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

tester

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] Augmentation / réduction de l'échelle des données 2D
Analyse de données python
[python] Lecture de données
Créer un diagramme de dispersion 3D avec SciPy + matplotlib (Python)
Analyse de données avec python 2
Bibliothèques de visualisation de données Python
Calculer IDCT 2D ~ Python
Présentation de l'analyse de données python
Nettoyage des données à l'aide de Python
Python: Diagramme de distribution de données bidimensionnelle (estimation de la densité du noyau)
Modèle d'analyse de données Python
[Python] Tri des données Numpy
Normariser les données avec Scipy
Analyse de données avec Python
Exemple de données créées avec python
Mon conteneur d'analyse de données python
Gérer les données ambiantes en Python
structure de données Python push pop
Python pour l'analyse des données Chapitre 4
Exporter des données 3D depuis QGIS
Afficher les données UTM-30LX en Python
Créer un gif 3D avec python3
Obtenez des données Youtube avec python
Python: image de tableau 3D (numpy.array)
python> Gestion des tableaux 2D
Mon environnement d'analyse de données python
Application Python: visualisation de données, partie 2: matplotlib
Notes d'apprentissage sur l'analyse des données Python
Python pour l'analyse des données Chapitre 2
AtCoder ABC 182 Python (A ~ D)
Conversion de type de données d'image [Python]
Analyse de données à l'aide de pandas python
Piège de tableau bidimensionnel Python [copie du tableau]
python> tuple> données, adresse = s.recvfrom (10000)
Python pour l'analyse des données Chapitre 3
Lire des données json avec python
[Python] [3D line graph] Plusieurs données dans un graphique, valeurs d'axe en caractères