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()
Soit dit en passant, données sur la distribution terrestre et maritime se présente comme suit.
Recommended Posts