2017-05-25 1 views
0

Je suis un nouvel utilisateur de la librairie netCDF donc je m'excuse pour cette question basique. J'essaie de convertir un fichier ASCII avec 4 colonnes (lon, lat, profondeur, vélocité) en netCDF. Je reçois l'erreur suivante:Conversion Ascii en NetCDF

Vp [:] = fichier [:,:,:,:] IndexError: trop d'indices pour tableau

Pourriez-vous s'il vous plaît aidez-moi à trouver la cause de la Erreur? J'ai défini les dimensions des variables sur le nombre de lignes. Est-ce correct?

Merci d'avance.

Le fichier est grand, vous pouvez trouver un échantillon ici: https://www.dropbox.com/s/qq9529vcvq8t1av/test.txt?dl=0

# -*- coding: utf-8 -*- 
from netCDF4 import Dataset 
import numpy as np 
import sys 


file = np.loadtxt('test.txt', delimiter=' ') 
# NC file setup 
mydata = Dataset('Vp.nc', 'w', format='NETCDF4') 
mydata.description = '3D VP velocity model' 

# dimensions 
mydata.createDimension('latitude', 1000) 
mydata.createDimension('longitude', 1000) 
mydata.createDimension('depth', 1000) 

Vp = mydata.createVariable('Vp', 'f4', ('latitude', 'longitude', 'depth'), fill_value=0) 

Vp[:] = file[:,:,:] 
Vp.units = 'km/s' 

Répondre

1

Voici plusieurs questions

  • ne pas utiliser les noms de fonctions intégrées comme noms de variables, comme file
  • ne pas mettre les données de coordonnées dans la variable, mais dans la variable distincte
  • si vous ajoutez des données à la variable NetCDF, les tailles de t être égale
  • votre erreur actuelle est simplement de demander des dimensions mal de tableau numpy, qui est 1000,4 dans votre exemple de fichier

Voici un exemple qui fonctionne, mais je ne l'ai pas extraire des données variables correctes parce que Je ne connais pas la structure réelle et je fais attention à la refonte.

from netCDF4 import Dataset 
import numpy as np 
import sys 


input_file = np.loadtxt('test.txt', delimiter=' ') 
# NC file setup 
mydata = Dataset('Vp.nc', 'w', format='NETCDF4') 
mydata.description = '3D VP velocity model' 

# dimensions 
mydata.createDimension('longitude', 128) 
mydata.createDimension('latitude', 4) 
lat = mydata.createVariable('latitude', 'f4','longitude') 
lat.long_name = "latitude" 
lat.units = "degrees_north" 
lat.standard_name = "latitude" 
lon = mydata.createVariable('longitude', 'f4','latitude') 
lon.long_name = "longitude" 
lon.units = "degrees_east" 
lon.standard_name = "longitude" 

## mydata.createVariable('depth', 1) 

Vp = mydata.createVariable('Vp', 'f4', ('longitude','latitude'), fill_value=0) 

Vp[:128,:4] = input_file[:512,3].reshape(128,4) 
## lon[:] = ??? 
## lat[:] = ??? 
Vp.units = 'km/s'