Greetings,
For posterity, I've filed this now in the github issues tracker for
python-netcdf4.
https://github.com/Unidata/netcdf4-python/issues/682
daryl
On Sat, 17 Jun 2017, daryl herzmann wrote:
Howdy,
Would some kind python user hit me with the clue-by-four here as to how to
make scale_factor work with python-netcdf4 and the ushort type? I am using
current conda-forge on python2.7. Here's my minimal example:
"""scale_factor.py"""
from __future__ import print_function
import netCDF4
import numpy as np
def create_file():
"""Create"""
nc = netCDF4.Dataset('test.nc', 'w')
nc.createDimension('x', 10)
ncvar = nc.createVariable('ncvar', np.ushort, ('x', ))
ncvar.scale_factor = 100.
ncvar.add_offset = 0.
nc.close()
def write_data():
"""Write"""
nc = netCDF4.Dataset('test.nc', 'a')
nc.set_auto_maskandscale(True)
nc.variables['ncvar'][5] = 1.5
nc.close()
nc = netCDF4.Dataset('test.nc', 'a')
nc.set_auto_maskandscale(False)
nc.variables['ncvar'][6] = 150.5
nc.close()
def read_file():
"""Read"""
nc = netCDF4.Dataset('test.nc', 'r')
nc.set_auto_maskandscale(True)
print("read[5] resulted in %s" % (nc.variables['ncvar'][5],))
print("read[6] resulted in %s" % (nc.variables['ncvar'][6],))
nc.close()
nc = netCDF4.Dataset('test.nc', 'r')
nc.set_auto_maskandscale(False)
print("readv2[5] resulted in %s" % (nc.variables['ncvar'][5],))
print("readv2[6] resulted in %s" % (nc.variables['ncvar'][6],))
nc.close()
def main():
"""Go Main"""
create_file()
write_data()
read_file()
if __name__ == '__main__':
main()
This results in
$ python scale_factor.py
read[5] resulted in 0.0
read[6] resulted in 15000.0
readv2[5] resulted in 0
readv2[6] resulted in 150
if I switch to np.float32 as the netcdf variable type, I get proper results
$ python scale_factor.py
read[5] resulted in 1.49999996647
read[6] resulted in 15050.0
readv2[5] resulted in 0.015
readv2[6] resulted in 150.5
thanks!
daryl
--
/**
* daryl herzmann
* Systems Analyst III -- Iowa Environmental Mesonet
* https://mesonet.agron.iastate.edu
*/