При попытке записать массив NumPy с плавающей запятой в набор данных NetCDF4, я получаю RuntimeError: NetCDF: HDF error
. Я считаю, что где-то TensorFlow2.0 испортил NetCDF4, но мне нужно импортировать оба в одном классе / функции. Непонятно, почему последовательность импорта библиотек влияет на ввод-вывод файла NetCDF4.
Вот пример сценария:
##The sequence of import which doesn't work
import numpy as np
import tensorflow as tf ### <<< if imported here, saving .nc doesn't work
import netCDF4 as nc
#import tensorflow as tf ### <<< if imported here, saving .nc works properly
print("I am TensorFlow ", tf.__version__, " but I have no job here")
print("I would let NetCDF4 ", nc.__version__," do it's job, for now")
Nx = 160 # just another number
outputfile = "outputfile.nc" # just another filename
ArrayField = np.ones((Nx,Nx,1)) # sample array to write
print("Writing field data of shape", ArrayField.shape)
ncfile = nc.Dataset("outputfile.nc",'w',format='NETCDF4_CLASSIC')
ncfile.createDimension('X',ArrayField.shape[0]) #line is probably okay
newx = ncfile.createVariable('X','d',('X')) #line is probably okay
newx[:] = np.linspace(0.00,1.00,ArrayField.shape[0]) #line is probably okay
velx = ncfile.createVariable('Component_X','d',('X','X')) #line is probably okay
velx[:] = ArrayField[:,:,0].T #line is probably okay
print("Something written to: ", outputfile)
ncfile.close() ###### <<<<<<< Gives error here
print("Data successfully written to: ", outputfile)
Вывод / Ошибка:
I am TensorFlow 2.0.0 but I have no job here
I would let NetCDF4 1.5.3 do it's job, for now
Writing field data of shape (160, 160, 1)
Something written to: outputfile.nc
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-1-1cfdf4070b97> in <module>
22
23 print("Something written to: ", outputfile)
---> 24 ncfile.close() ###### <<<<<<< Gives error here
25 print("Data successfully written to: ", outputfile)
netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset.close()
netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset._close()
netCDF4/_netCDF4.pyx in netCDF4._netCDF4._ensure_nc_success()
RuntimeError: NetCDF: HDF error
Ожидаемый результат:
I am TensorFlow 2.0.0 but I have no job here
I would let NetCDF4 1.5.3 do it's job, for now
Writing field data of shape (160, 160, 1)
Something written to: outputfile.nc
Data successfully written to: outputfile.nc
Хотя я могу импортировать TF2.0 после импорта NetCDF4, чтобы этот конкретный образец работал, он на самом деле не отвечает на вопрос о получении RuntimeError: NetCDF: HDF error
и устранении проблемы с его использованием в сложных случаях. Кроме того, я хотел бы вернуть дополнительную информацию об отладке.
- Протестировано с
tensorflow==2.1.0
и 2.2.0
, дает ту же ошибку. - Размер диска созданного мусора .n c файл
~204K
, что должно быть около ~209K
для этого образца массива. - Проблема сохраняется на другом компьютере или в чистой среде при установке только
tensorflow==2.0.0
, numpy==1.17.3
, netCDF4==1.5.3
. - На всякий случай вот список
pip freeze
моей чистой среды: https://gist.github.com/aakash30jan/9ae0cf3dde8a63d28df5275873cb0f10