Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 新阵列的总大小必须保持不变(netCDF)_Python_Csv_Numpy_Netcdf - Fatal编程技术网

Python 新阵列的总大小必须保持不变(netCDF)

Python 新阵列的总大小必须保持不变(netCDF),python,csv,numpy,netcdf,Python,Csv,Numpy,Netcdf,我无法将CSV文件转换为NetCDF。我正在Python中使用numpy和netCDF4来尝试实现这一点 错误: Traceback (most recent call last): File "csv2nc.py", line 47, in <module> tmaxsfc[:] = temps File "netCDF4.pyx", line 3167, in netCDF4.Variable.__setitem__ (netCDF4.c:39349) ValueError: t

我无法将CSV文件转换为NetCDF。我正在Python中使用numpy和netCDF4来尝试实现这一点

错误:

Traceback (most recent call last):
File "csv2nc.py", line 47, in <module>
tmaxsfc[:] = temps
File "netCDF4.pyx", line 3167, in netCDF4.Variable.__setitem__ (netCDF4.c:39349)
ValueError: total size of new array must be unchanged
import numpy as np
import netCDF4

data = np.loadtxt('/home/weather/Dropbox/d0_tmaxs', delimiter=',', skiprows=0)

temp = data[:,1]
lat = data[:,2]
lon = data[:,3]

with netCDF4.Dataset('tmaxsfc.nc', mode="w", format='NETCDF4') as ds:
# some file-level meta-data attributes:
ds.Conventions = "CF-1.6"
ds.title = 'Maximum Temperature values for Day 0'
ds.institution = 'weather'
ds.source = ''

#print(lon.shape)

lats = np.array(lat,np.float32).reshape(255)
lons = np.array(lon,np.float32).reshape(255)
temps = np.array(temp,np.float32).reshape(255)

ds.createDimension('latitude', 255)
ds.createDimension('longitude', 255)

tmaxsfc = ds.createVariable('tmaxsfc', 'f4', ('latitude', 'longitude',))
tmaxsfc[:] = temps
tmaxsfc.units = 'F'
tmaxsfc.long_name = 'Temperature'
20160226,40,36.65408,-83.21783
20160226,35.1508,41.00928,-74.73628
20160226,31,43.77714,-71.75598
20160226,23.8302,44.41944,-72.01944
20160226,22,39.5803,-79.3394
d0_tmaxs文本文件示例:

Traceback (most recent call last):
File "csv2nc.py", line 47, in <module>
tmaxsfc[:] = temps
File "netCDF4.pyx", line 3167, in netCDF4.Variable.__setitem__ (netCDF4.c:39349)
ValueError: total size of new array must be unchanged
import numpy as np
import netCDF4

data = np.loadtxt('/home/weather/Dropbox/d0_tmaxs', delimiter=',', skiprows=0)

temp = data[:,1]
lat = data[:,2]
lon = data[:,3]

with netCDF4.Dataset('tmaxsfc.nc', mode="w", format='NETCDF4') as ds:
# some file-level meta-data attributes:
ds.Conventions = "CF-1.6"
ds.title = 'Maximum Temperature values for Day 0'
ds.institution = 'weather'
ds.source = ''

#print(lon.shape)

lats = np.array(lat,np.float32).reshape(255)
lons = np.array(lon,np.float32).reshape(255)
temps = np.array(temp,np.float32).reshape(255)

ds.createDimension('latitude', 255)
ds.createDimension('longitude', 255)

tmaxsfc = ds.createVariable('tmaxsfc', 'f4', ('latitude', 'longitude',))
tmaxsfc[:] = temps
tmaxsfc.units = 'F'
tmaxsfc.long_name = 'Temperature'
20160226,40,36.65408,-83.21783
20160226,35.1508,41.00928,-74.73628
20160226,31,43.77714,-71.75598
20160226,23.8302,44.41944,-72.01944
20160226,22,39.5803,-79.3394

值得一提的是,文本文件有255行。我做错了什么?

我对
netcdf
有些生疏,但没有

tmaxsfc = ds.createVariable('tmaxsfc', 'f4', ('latitude', 'longitude',))
意味着
tmaxsfc
是一个二维数组,255乘255?您正在按经度在纬度网格上定义它


但看起来您的输入将显示在散点图上,255个点,每个点由纬度、经度和温度定义。

我对
netcdf
有点生疏,但没有

tmaxsfc = ds.createVariable('tmaxsfc', 'f4', ('latitude', 'longitude',))
意味着
tmaxsfc
是一个二维数组,255乘255?您正在按经度在纬度网格上定义它


但看起来您的输入将显示在散点图上,255个点,每个点由纬度、经度和温度定义。

因此错误来自
temp
是一个包含255个元素的1D数组,但
tmaxsfc
变量被定义为2D变量。您要做的是制作一个单一维度,例如
,所有3个1D变量都可以是以下函数:

import numpy as np
import netCDF4

data = np.loadtxt('/home/weather/Dropbox/d0_tmaxs', delimiter=',', skiprows=0)

temp = np.array(data[:,1], dtype=np.float32).reshape(255)
lat = np.array(data[:,2], dtype=np.float32).reshape(255)
lon = np.array(data[:,3], dtype=np.float32).reshape(255)

with netCDF4.Dataset('tmaxsfc.nc', mode="w", format='NETCDF4') as ds:
    # some file-level meta-data attributes:
    ds.Conventions = "CF-1.6"
    ds.title = 'Maximum Temperature values for Day 0'
    ds.institution = 'weather'
    ds.source = ''

    ds.createDimension('station', 255)
    dims = ('station',)

    tmaxsfc = ds.createVariable('tmaxsfc', np.float32, dims) 
    tmaxsfc[:] = temps
    tmaxsfc.units = 'F'
    tmaxsfc.long_name = 'Temperature'

    lon_var = ds.createVariable('longitude', np.float32, dims)
    lon_var[:] = lon
    lon.units = 'degrees_east'

    lat_var = ds.createVariable('latitude', np.float32, dims)
    lat_var[:] = lat
    lat.units = 'degress_north'

因此错误来自于
temp
是一个包含255个元素的1D数组,但是
tmaxsfc
变量被定义为2D变量。您要做的是制作一个单一维度,例如
,所有3个1D变量都可以是以下函数:

import numpy as np
import netCDF4

data = np.loadtxt('/home/weather/Dropbox/d0_tmaxs', delimiter=',', skiprows=0)

temp = np.array(data[:,1], dtype=np.float32).reshape(255)
lat = np.array(data[:,2], dtype=np.float32).reshape(255)
lon = np.array(data[:,3], dtype=np.float32).reshape(255)

with netCDF4.Dataset('tmaxsfc.nc', mode="w", format='NETCDF4') as ds:
    # some file-level meta-data attributes:
    ds.Conventions = "CF-1.6"
    ds.title = 'Maximum Temperature values for Day 0'
    ds.institution = 'weather'
    ds.source = ''

    ds.createDimension('station', 255)
    dims = ('station',)

    tmaxsfc = ds.createVariable('tmaxsfc', np.float32, dims) 
    tmaxsfc[:] = temps
    tmaxsfc.units = 'F'
    tmaxsfc.long_name = 'Temperature'

    lon_var = ds.createVariable('longitude', np.float32, dims)
    lon_var[:] = lon
    lon.units = 'degrees_east'

    lat_var = ds.createVariable('latitude', np.float32, dims)
    lat_var[:] = lat
    lat.units = 'degress_north'