我使用 python 创建 netCDF 文件。当我尝试将值(数据)分配给变量的部分(或切片)时,取决于切片的“类型”是什么,我可以或不能分配这些值。
我不知道为什么。任何有助于理解为什么会这样的帮助将不胜感激。
例如:
import numpy as np
from netCDF4 import Dataset
nb_steps = 2
nb_lat = 3
nb_lon = 4
# open/create file
f = Dataset('/home/ccorbel/Desktop/test.nc', 'w', format='NETCDF3_CLASSIC')
f.createDimension('lat', nb_lat)
f.createDimension('lon', nb_lon)
f.createDimension('time', nb_steps)
# create/fill variables
variables = {}
variables['t'] = f.createVariable('temperature', 'float64', ('time', 'lat', 'lon'))
variables['t'][...] = np.zeros((nb_steps, nb_lat, nb_lon))
# "equivalent" to [0, :, ::-1]
slc = [0, slice(None, None, None), slice(None, None, -1)]
# "equivalent" to [0, :, :]
slc2 = [0, slice(None, None, None), slice(None, None, None)]
# "equivalent" to [:, ::-1]
slc3 = [ slice(None, None, None), slice(None, None, -1)]
print type(variables['t'])
# type 'netCDF4.Variable'
print type(variables['t'][slc])
# type 'numpy.ndarray'
print type(variables['t'][slc][...])
# type 'numpy.ndarray'
print np.shape(variables['t'][slc])
# (3, 4)
# variables['t'][slc] = np.random.random((nb_lat, nb_lon))
# return IndexError: too many indices
variables['t'][slc][...] = np.random.random((nb_lat, nb_lon))
print '\n', variables['t'][...]
# [[[ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]]
#
# [[ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]]]
variables['t'][...] = np.zeros((nb_steps, nb_lat, nb_lon)) # reset
variables['t'][slc2] = np.random.random((nb_lat, nb_lon))[slc3]
print '\n', variables['t'][...]
# [[[ 0.17502009 0.98414122 0.89686025 0.11072791]
# [ 0.51351626 0.09234043 0.54314083 0.937711 ]
# [ 0.98732418 0.22714407 0.87387761 0.44653219]]
# [[ 0. 0. 0. 0. ]
# [ 0. 0. 0. 0. ]
# [ 0. 0. 0. 0. ]]]
variables['t'][...] = np.zeros((nb_steps, nb_lat, nb_lon)) # reset
#variables['t'][0, :, ::-1] = np.random.random((nb_lat, nb_lon))
# return IndexError: too many indices
variables['t'][0, :, ::-1][...] = np.random.random((nb_lat, nb_lon))
print '\n', variables['t'][...]
# [[[ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]]
# [[ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]
# [ 0. 0. 0. 0.]]]
variables['t'][...] = np.zeros((nb_steps, nb_lat, nb_lon)) # reset
variables['t'][0, :, :] = np.random.random((nb_lat, nb_lon))[:, ::-1]
print '\n', variables['t'][...]
# [[[ 0.61406835 0.11069783 0.28667398 0.45018246]
# [ 0.3833354 0.98871281 0.55559104 0.60415683]
# [ 0.75200954 0.75106639 0.11688565 0.14264615]]
# [[ 0. 0. 0. 0. ]
# [ 0. 0. 0. 0. ]
# [ 0. 0. 0. 0. ]]]
variables['t'][...] = np.zeros((nb_steps, nb_lat, nb_lon)) # reset
variables['t'][0, :, :] = np.random.random((nb_lat, nb_lon))[slc3]
print '\n', variables['t'][...]
# [[[ 0.09437484 0.45757906 0.81116891 0.23580254]
# [ 0.37316425 0.06768454 0.20259876 0.42127472]
# [ 0.78879307 0.62535419 0.08942293 0.68789143]]
# [[ 0. 0. 0. 0. ]
# [ 0. 0. 0. 0. ]
# [ 0. 0. 0. 0. ]]]
f.close()