Re: PyNIO: Assigning data to 3-d NetCDF variable [RESOLVED]

From: Oleksandr Huziy <guziy.sasha_at_nyahnyahspammersnyahnyah>
Date: Mon Nov 18 2013 - 15:53:07 MST

Are you sure this works, if i understand correctly, here you are assigning
a 2d array to a 3d var, it should have complained.... Or it is writing all
the time to the first time slice of the hi variable... check the output
with ncview for other time steps...

for i in range(0, Clime_hi.shape[0]):
>>>>> f_out.variables['hi'].assign_value(Clime_hi[i,:,:])
>>>>>
>>>> If it is OK, then I am very surprised))

Cheers

--
Oleksandr (Sasha)
2013/11/18 Gregory Deemer <gjdeemer@alaska.edu>
> Hi Oleksandr,
>
> Thank you for your help today, I think we have reached a solution.
> Declaring the variable as double, and reassigning my _FillValue from
> np.float32 to np.double to match this new type was the trick. It is a bit
> puzzling though, as I know the data that was ingested came from a
> single-precision floating point flat binary file.
>
> The logic in my value assignment statement:
>
> for i in range(0, Clime_hi.shape[0]):
>>>>>>     f_out.variables['hi'].assign_value(Clime_hi[i,:,:])
>>>>>>
>>>>> Was of the correct form and is now functioning.
>
> Once again, thank you!
> Greg
>
>
> O
>  n Nov 18, 2013, at 1:03 PM, Oleksandr Huziy wrote:
>
> The ESG site is not letting me in yet))
> See here: http://www.pyngl.ucar.edu/FAQ/#ReadNetCDF
> item 23.
>
> Cheers
>
>
> 2013/11/18 Gregory Deemer <gjdeemer@alaska.edu>
>
>> Hi Oleksandr,
>>
>> The double data type did not work out.
>>
>> fatal:NetCDF: Not a valid data type or _FillValue type mismatch: error
>> attempting to write variable (hi) to file
>>
>> Perhaps my  _FillValue being -9999.0 is causing the type error mismatch?
>> I have written data to a NetCDF using similar methods, but my _FillValue
>> was a positive int in those cases.
>>
>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> - - - - - - - - -
>>
>> Gregory J. Deemer
>> Graduate Research Assistant
>> Department of Atmospheric Sciences
>> University of Alaska Fairbanks
>> IARC 338K
>> Office: (907) 474-5430
>> Cell: (907) 750-1063
>>
>>
>>
>> On Mon, Nov 18, 2013 at 12:39 PM, Oleksandr Huziy <guziy.sasha@gmail.com>wrote:
>>
>>> Gregory:
>>>
>>> I am  trying to install nio now. Try to create the variable as double:
>>>
>>> # ICE THICKNESS
>>> f_out.create_variable('hi', 'd', ('time', 'y', 'x'))
>>>
>>>
>>> 2013/11/18 Gregory Deemer <gjdeemer@alaska.edu>
>>>
>>>> Oleksandr,
>>>>
>>>> Thank you for the quick reply. I attempted the code examples that you
>>>> suggested and PyNIO came back with errors.
>>>>
>>>> f_out.variables['hi'][i,:,:] = Clime_hi[i,:,:]
>>>>
>>>> self._obj[xsel] = value
>>>> NIOError: type or dimensional mismatch writing to variable (hi)
>>>>
>>>>
>>>> f_out.variables['hi'][:] = Clime_hi
>>>> self._obj[xsel] = value
>>>> NIOError: type or dimensional mismatch writing to variable (hi)
>>>>
>>>> I will try a few other permutations of your suggestion by replacing '='
>>>> with .assign_value()
>>>>
>>>> Thanks again,
>>>> Greg
>>>>
>>>>
>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>> - - - - - - - - - -
>>>>
>>>> Gregory J. Deemer
>>>> Graduate Research Assistant
>>>> Department of Atmospheric Sciences
>>>> University of Alaska Fairbanks
>>>> IARC 338K
>>>> Office: (907) 474-5430
>>>> Cell: (907) 750-1063
>>>>
>>>>
>>>>
>>>> On Mon, Nov 18, 2013 at 12:14 PM, Oleksandr Huziy <
>>>> guziy.sasha@gmail.com> wrote:
>>>>
>>>>> Hi Gregory:
>>>>>
>>>>> Does it work like this?
>>>>>
>>>>> # Write values to file
>>>>> for i in range(0, Clime_hi.shape[0]):
>>>>>     f_out.variables['hi'][i,:,:] = Clime_hi[i,:,:]
>>>>>
>>>>>
>>>>> or
>>>>>
>>>>> f_out.variables['hi'][:] = Clime_hi
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2013/11/18 Gregory Deemer <gjdeemer@alaska.edu>
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I'm wanting to assign values to a 3-D variable consisting of time, y,
>>>>>> x. The time dimension is unlimited but is assigned 366 values. I have seen
>>>>>> some examples of how to approach this problem with other scripting
>>>>>> languages where a loop is applied to write the 2-D slice per timestep, and
>>>>>> that is the approach I have taken here, but I am receiving the error
>>>>>> message:
>>>>>>
>>>>>> NIOError: type or dimensional mismatch writing to variable (hi)
>>>>>>
>>>>>>  For reference, the shapes of pertinent variables in the code snippet
>>>>>> to follow are:
>>>>>>
>>>>>> Clime_hi.shape = (366, 120, 360)
>>>>>> time_dat.shape = (366,)  # values spanning 0 - 365
>>>>>> lat_datR.shape  = (120, 360)
>>>>>> lon_datR.shape = (120, 360)
>>>>>>
>>>>>>
>>>>>>
>>>>>>  # Create new variable dimensions
>>>>>> f_out.create_dimension('time', None)
>>>>>> f_out.create_dimension('y', 120)
>>>>>> f_out.create_dimension('x', 360)
>>>>>>
>>>>>> # TIME
>>>>>> f_out.create_variable('time', 'd', ('time',))
>>>>>> # Attributes of time
>>>>>> setattr(f_out.variables['time'], 'standard_name', 'Valid Time')
>>>>>> setattr(f_out.variables['time'], 'units', 'hours since 2001-01-01
>>>>>> 00:00:00')
>>>>>> setattr(f_out.variables['time'], 'time_origin', '2001-01-01 00:00:00'
>>>>>> )
>>>>>> setattr(f_out.variables['time'], 'calendar', 'gregorian')
>>>>>> setattr(f_out.variables['time'], 'axis', 'T')
>>>>>> # Write values to file
>>>>>> f_out.variables['time'].assign_value(time_dat)
>>>>>>
>>>>>> # LATITUDE
>>>>>> f_out.create_variable('lat', 'd', ('y','x'))
>>>>>> # Attributes of latitude
>>>>>> setattr(f_out.variables['lat'], 'standard_name', 'latitude')
>>>>>> setattr(f_out.variables['lat'], 'units', 'degrees_north')
>>>>>> setattr(f_out.variables['lat'], 'axis', 'Y')
>>>>>> # Write values to file
>>>>>> f_out.variables['lat'].assign_value(lat_datR)
>>>>>>
>>>>>> # LONGITUDE
>>>>>> f_out.create_variable('lon', 'd', ('y', 'x'))
>>>>>> # Attributes of longitude
>>>>>> setattr(f_out.variables['lon'], 'standard_name', 'longitude')
>>>>>> setattr(f_out.variables['lon'], 'units', 'degrees_east')
>>>>>> setattr(f_out.variables['lon'], 'axis', 'X')
>>>>>> # Write values to file
>>>>>> f_out.variables['lon'].assign_value(lon_datR)
>>>>>>
>>>>>> # ICE THICKNESS
>>>>>> f_out.create_variable('hi', 'f', ('time', 'y', 'x'))
>>>>>> # Create variable attributes
>>>>>> setattr(f_out.variables['hi'], 'standard_name', 'sea_ice_thickness')
>>>>>> setattr(f_out.variables['hi'], 'units', 'm')
>>>>>> setattr(f_out.variables['hi'], '_FillValue', _FillandMiss)
>>>>>> setattr(f_out.variables['hi'], 'missing_value', _FillandMiss)
>>>>>> # Write values to file
>>>>>> for i in range(0, Clime_hi.shape[0]):
>>>>>>     f_out.variables['hi'].assign_value(Clime_hi[i,:,:])
>>>>>>
>>>>>> Again, the error message that I am given once the loop as finished
>>>>>> its iteration is this:
>>>>>>
>>>>>>     for i in range(0, Clime_hi.shape[0]):
>>>>>> NIOError: type or dimensional mismatch writing to variable (hi)
>>>>>>
>>>>>> Please let me know if more information is needed to solve this error.
>>>>>>
>>>>>> Thank you,
>>>>>> Greg
>>>>>>
>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>>> - - - - - - - - - - -
>>>>>>
>>>>>> Gregory J. Deemer
>>>>>> Graduate Research Assistant
>>>>>> Department of Atmospheric Sciences
>>>>>> University of Alaska Fairbanks
>>>>>> IARC 338K
>>>>>> Office: (907) 474-5430
>>>>>> Cell: (907) 750-1063
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> pyngl-talk mailing list
>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>> http://mailman.ucar.edu/mailman/listinfo/pyngl-talk
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sasha
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Sasha
>>>
>>
>>
>
>
> --
> Sasha
>
>
>
-- 
Sasha

_______________________________________________
pyngl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/pyngl-talk
Received on Mon Nov 18 15:53:18 2013

This archive was generated by hypermail 2.1.8 : Fri Nov 22 2013 - 09:37:03 MST