2016-12-16 16 views
1

Mit der python netcdf4 Bibliothek möchte ich einen Test-Datensatz für meine netcdf4 lesen Skript schreiben. Ich kann jedoch nicht die gewünschte Ausgabe erzeugen.NetCDF4 Python erstellen numpy Multi-Dimension-Arrays

Dies ist derzeit meine Schreibschrift:

# write file 
varlist = ['ABC123', 'DEF456', 'GHI789'] 
varlist = np.array([[i for i in k] for k in varlist], dtype='S1') 
with Dataset(indexfile, 'w', format='NETCDF4') as file: 
    file.createDimension('vars', [3,6]) 
    vars_list = file.createVariable('vars', 'S1', (u'vars',)) 
    vars_list[:] = varlist 

Aber das gibt eine TypeError:

TypeError: an integer is required

Wie soll ich meine Eingabe ändern oder ein Skript schreiben, um das gewünschte Ergebnis zu bekommen?

Antwort

0

Sie müssen jeweils eine Dimension erstellen. Zum Beispiel, rufen Sie Ihre Dimensionen x und y:

$ ncdump data.nc 

netcdf data { 
dimensions: 
    x = 3 ; 
    y = 6 ; 
variables: 
    char vars(x, y) ; 
data: 

vars = 
    "ABC123", 
    "DEF456", 
    "GHI789" ; 
} 

Lesen sie wieder mit Python funktioniert auch:

with Dataset(indexfile, 'r', format='NETCDF4') as nc_file: 
    print(nc_file.variables['vars'][:]) 

[[b'A' b'B' b'C' b'1' b'2' b'3'] 
[b'D' b'E' b'F' b'4' b'5' b'6'] 
[b'G' b'H' b'I' b'7' b'8' b'9']] 

import numpy as np 
from netCDF4 import Dataset 

indexfile = 'data.nc' 

varlist = ['ABC123', 'DEF456', 'GHI789'] 
varlist = np.array([[i for i in k] for k in varlist], dtype='S1') 
with Dataset(indexfile, 'w', format='NETCDF4') as nc_file: 
    nc_file.createDimension('x', 3) 
    nc_file.createDimension('y', 6) 
    vars_list = nc_file.createVariable('vars', 'S1', ('x', 'y')) 
    vars_list[:] = varlist 

Dies diese Datei erzeugt