2016-12-16 24 views
1

python netcdf4ライブラリでは、私はnetcdf4読み込みスクリプト用のテストデータセットを書きたいと思っています。しかし、私は希望の出力を生成することができません。NetCDF4 pythonはnumpyの多次元配列を作成します

これは、現在、私の書き込みスクリプトです:

# 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 

しかし、これはTypeErrorを返します。

TypeError: an integer is required

どのように私は私の入力を変更したり、目的の結果を取得するスクリプトを書く必要がありますか?

答えて

0

一度に1つのディメンションを作成する必要があります。たとえば、あなたの寸法xyを呼び出す:

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 

をこれがこのファイルを生成します:

$ ncdump data.nc 

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

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

のPythonでそれをバック読むにはあまりにも動作します:

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']] 
関連する問題