netcdf 파일을 만들려고합니다. 첫 번째 단계에서 원하는 것은 netcdf 파일의 데이터를 읽고 새로운 netcfd 파일에 작성하는 것입니다.이 데이터 배열은 dtype float64 및 3 차원 (시간, 위도, 경도)을 갖습니다. 나는 다음과 같은 오류가 스크립트를 실행하면netcdf 파일을 만들 때 TypeError가 발생했습니다.
:
TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('U32') dtype('U32') dtype('U32')
이해, 어떻게 든 데이터 유형이 일치하지 않는. 그러나 나는 문제가 어디에 있는지 알지 못한다.
fid = Dataset(Dir, "r")
t2m = np.array(fid.variables["t2m"])
#create new netcdf file
new_file = "ERA_t2m_2011to2017"
dataset = Dataset(new_file, "w", format="NETCDF3_64BIT_OFFSET")
#create dimensions
longitude = dataset.createDimension("longitude", 1200)
latitude = dataset.createDimension("latitude", 101)
time = dataset.createDimension("time", None)
#create variables
newvar = dataset.createVariable("longitude", np.float32, ("longitude"))
newvar.long_name = "longitude"
newvar.units = "degrees_east"
newvar.axis = "longitude-axis"
newvar[:] = np.array(fid.variables["longitude"])
newvar = dataset.createVariable("latitude", np.float32, ("latitude"))
newvar.long_name = "latitude"
newvar.units = "degrees_north"
newvar.axis = "latitude-axis"
newvar[:] = np.array(fid.variables["latitude"])
newvar = dataset.createVariable("time", np.int32, ("time"))
newvar.long_name = "time"
newvar.units = "hours since 1900-01-01 00:00:0.0"
newvar.calendar = "gregorian"
newvar.axis = "time-axis"
newvar[:] = np.array(fid.variables["time"])
newvar = dataset.createVariable("t2m", np.float64, ("time", "latitude", "longitude"))
newvar.long_name = "2 meter temperature"
newvar.units = "K"
newvar.FillValue = "-32767"
newvar.scale_factor = "0.00137038771743"
newvar.add_offset = "238.393472216"
newvar.missing_value = "-32767"
newvar[:] = t2m
아마 중요한 정보는
fid.variables["t2m"]
다음과 같은 출력 얻을 수 있음을, 또한 :
이class 'netCDF4._netCDF4.Variable'
int16 t2m(time, latitude, longitude)
scale_factor: 0.00135205961432
add_offset: 238.864955074
_FillValue: -32767
missing_value: -32767
units: K
long_name: 2 metre temperature
unlimited dimensions: time current shape = (2920, 101, 1200) filling off
그래서 2tm 변수가 처음에 DTYPE의 INT32 것 같다,하지만 그것은집니다 내가 그것을 읽을 때 float64가 될 것입니다. 그러나 변수 2tm을 float64 또는 int32로 작성하면 같은 오류가 발생합니다.
나를 도와 줄 수 있습니까? 감사합니다.
2 미터 온도가 정수인 경우 이상합니다. 하지만 여하튼, 전체 추적을 추가하십시오. 적어도 어떤 행이'TypeError'를 초래하는지 언급하십시오. 지금까지 나는 코드에 아무런 이상이 보이지 않는다. 일반적으로 Numpy/NetCDF4는 올바른 데이터 유형으로 캐스팅하는 데 매우 유연하다. – Bart