Lisez le binaire big endian en Python et convertissez-le en ndarray

Je vais vous montrer comment lire un tableau bidimensionnel binaire à valeur réelle à partir de Python. Plus précisément, lisez les données de terrain dans ici. Cette fois, la cible est les données de terrain utilisées pour MSM. En ce qui concerne le nombre de grilles et la latitude / longitude, les données de ce répertoire sont l'état actuel. Il semble être compatible avec MSM.

Selon README

4.format de fichier
 (1)formulaire de données
Nombre réel de 4 octets(IEEE754)C'est un tableau bidimensionnel de.
La séquence d'octets est big endian.
 (2)Système de coordonnées
Système de coordonnées de grille de latitude et de longitude égales.

    (a)Modèle de prévision numérique méso GPV
Nombre de grilles: Est-Ouest 481 Nord-Sud 505
Espacement du treillis: direction Est-Ouest 0.0625 degrés direction nord-sud 0.05 degrés
Point de grille principal: 47 latitude nord.6 degrés de longitude est 120 degrés
(Omission)
(3)Ordre de stockage des données
Stocke les points de grille avec la même latitude à partir du premier point de grille orienté vers l'est dans la direction longitudinale.
Il est également stocké à plusieurs reprises à la latitude juste au sud de celui-ci.

... Apparemment ...

Dans l'exemple ci-dessous

Données d'altitude géopotentielle de surface
    (a) "TOPO.MSM_5K_20071121"Modèle de prévision numérique méso pour GPV

Prenons ces données comme exemple. Tout d'abord, téléchargez les données.

$ wget http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original/etc/200709/TOPO.MSM_5K_20071121

Le reste fonctionne avec python. Il est supposé que «numpy» est installé.

import numpy as np
f = open("TOPO.MSM_5K_20071121",mode='rb')
topo = np.fromfile(f, dtype='>f',sep='').reshape(505,481)

Vous pouvez désormais charger des données d'altitude topographique de la même taille que le MSM 505x481. J'ai lu les données sous la forme d'un nombre décimal flottant bigendien de 4 octets avec dtype = '> f' 'dans fromfile, je les ai sauvegardées dans un tableau unidimensionnel et je les ai remodelées. En spécifiant dtype, fromfile peut être obtenu autrement qu'un tableau unidimensionnel, mais dt = np.dtype (('> f', (505,481)))Même s'il est spécifié comme ceci,topo.shape = Ce sera un tableau tridimensionnel comme (1 505 481) `. J'ai également vérifié le document dtype, mais il semble qu'il ne puisse pas être transformé en un tableau bidimensionnel d'un seul coup.

Visualisons-le pour voir s'il est correctement chargé. Pour plus de détails, veuillez consulter cet article.

%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import pygrib

grbs = pygrib.open('/temp/Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin')
grb = grbs.select(forecastTime=0)[0]
lats, lons = grb.latlons()
flat_lats= np.ravel(lats)
flat_lons= np.ravel(lons)
m = Basemap(llcrnrlat=lats.min(),urcrnrlat=lats.max(), llcrnrlon=lons.min(),urcrnrlon=lons.max())
m.drawcoastlines()
m.contourf(flat_lons, flat_lats, b, latlon=True, tri=True)
plt.colorbar()
plt.show()

image.png

Soit dit en passant, données sur la distribution terrestre et maritime se présente comme suit. image.png

Recommended Posts

Lisez le binaire big endian en Python et convertissez-le en ndarray
Convertir le fichier FBX en ASCII <-> BINARY en Python
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
[Python] Convertit les nombres décimaux en nombres binaires, octaux et hexadécimaux
Convertir le tableau NumPy "ndarray" en lilt en Python [tolist ()]
Comment convertir des nombres à virgule flottante en nombres binaires en Python
Essayez de le faire avec GUI, PyQt en Python
Conseils pour coder courts et faciles à lire en Python
Comment convertir Youtube en mp3 et le télécharger en toute sécurité [Python]
Lire json avec C # et convertir en type dictionnaire (forcé)
Orienté objet en langage C: "○ ✕ game" a été refacturé et porté en Python
Convertir Markdown en PDF en Python
Créer et lire des paquets de messages en Python
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Convertissez le résultat de python optparse en dict et utilisez-le
Lire Python csv et exporter vers txt
Lire et écrire des fichiers JSON avec Python
Convertir de Markdown en HTML en Python
Comment utiliser is et == en Python
Convertir une URL absolue en URL relative en Python
Comment générer une séquence en Python et C ++
Convertissez des PDF en images en masse avec Python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Convertir des fichiers CSV UTF-8 pour les lire dans Excel
POST JSON avec Python et recevez avec PHP
Convertir un float exponentiel en str en Python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Convertir le code de maillage cubique en WKT en Python
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
Comment lire les fichiers de numéros de série en boucle, les traiter et les représenter graphiquement
Différences dans la façon d'écrire du code source externe entre Ruby et Python
Comment générer un code QR et un code à barres en Python et le lire normalement ou en temps réel avec OpenCV
J'ai lu "Quantum Computer Accelerates Artificial Intelligence" et j'ai essayé de le décrire en Python sans utiliser de formules mathématiques.
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Lire DXF avec python
Comment convertir / restaurer une chaîne avec [] en python
[Python] Convertit un conteneur à usage général et une classe entre eux
Convertir le masque de réseau de notation CIDR en notation décimale à points en Python
Dichotomie avec Python
Lisez le fichier csv et affichez-le dans le navigateur
Convertissez l'image au format .zip en PDF avec Python
Lire et écrire en virgule flottante simple précision en Python
Écrire des tests en Python pour profiler et vérifier la couverture
Je veux remplacer les variables dans le fichier de modèle python et le produire en masse dans un autre fichier
[Python] Comment trier un dict dans une liste et une instance dans une liste
Convertir l'API asynchrone de style callback en async / await en Python
Lire le fichier json avec Python, le formater et générer le json
Convertir / renvoyer des objets de classe au format JSON en Python
Lire et écrire des balises NFC avec python en utilisant PaSoRi
[Python] Création d'une méthode pour convertir la base en 1 seconde
Comment utiliser Decorator dans Django et comment le créer
Convertir le type d'entité Webpay en type Dict (récursivement en Python)
Python: peut être répété en lambda
Sortie d'un vidage binaire en binaire et retour dans un fichier binaire
Recherche binaire en Python