Re: removing zero dimensions ...

From: Saji Hameed <saji.nh_at_nyahnyahspammersnyahnyah>
Date: Wed Jun 01 2011 - 21:12:15 MDT

Hi Dennis,

What a popular issue!! Would it not be a good idea to have an online
NCL cook book? It can be a Wiki, so that folks can freely contribute
their implementations.

check out Wikia http://www.wikia.com/Wikia

Wikia could provide us with such a platform...

saji

---
On Thu, Jun 2, 2011 at 12:08 PM, Dennis Shea <shea@ucar.edu> wrote:
> Saji ... Ha! Ha!
> ================
>
> Just for fun .... I have attached my entry [rm_degen_dims].
> It includes some simple tests.
>
> D
>
> On 6/1/11 8:28 PM, Saji Hameed wrote:
>>
>> As you see below, I am not very good at naming functions.. here is a
>> function i use for the same purpose..
>>
>> function removeRedundantDimsOf(var)
>> begin
>>   var_dims=dimsizes(var)
>>   dim_names=getvardims(var)
>>   new_indcs=ind(var_dims.gt.1)
>>   newdims=var_dims(new_indcs)
>>   new_dimnames=(dim_names(new_indcs))
>>   ndims=dimsizes(newdims)
>>   newvar=new(newdims,typeof(var))
>>   newvar=var
>>   do i=0,ndims-1
>>     newvar!i=new_dimnames(i)
>>   end do
>> return(newvar)
>> end
>>
>> function remove_redundant_dims_of(var)
>> begin
>>   return(removeRedundantDimsOf(var))
>> end
>>
>> function remove_empty_dims_of(var)
>> begin
>>   return(removeRedundantDimsOf(var))
>> end
>>
>> saji
>>
>> On Thu, Jun 2, 2011 at 4:33 AM,<Maurice.McHugh@noaa.gov>  wrote:
>>>
>>> I have used the following successfully.  ncwa is a netCDF operators, and
>>> part of the NCO package.
>>>
>>>
>>> ncwa –a z_t fileIn.nc fileOut.nc
>>>
>>> where z_t is the vestigial or degenerate dimension of size 1 to be
>>> removed from fileIn.
>>>
>>> Hope this helps!
>>>
>>> Maurice
>>>
>>> ----- Original Message -----
>>> From: Mary Haley<haley@ucar.edu>
>>> Date: Wednesday, June 1, 2011 2:30 pm
>>> Subject: Re: removing zero dimensions ...
>>> To: ncl forum<ncl-talk@ucar.edu>
>>>
>>>
>>>> Just to answer Ufuk's original question:  we don't have any function
>>>> that removes the "zero dimension" or the "degenerate dimension" as we
>>>> call it.
>>>>
>>>> This question was brought up last year, so here's the answer (and a
>>>> function) for that:
>>>>
>>>>
>>>>
>>>> Chad, thanks for contributing your "squeeze" function.
>>>>
>>>> --Mary
>>>>
>>>>
>>>> On Jun 1, 2011, at 12:04 PM, Chad Herman wrote:
>>>>
>>>>> On 06/01/2011 02:00 PM, ncl-talk-request@ucar.edu wrote:
>>>>>>
>>>>>> Message: 6
>>>>>> Date: Wed, 01 Jun 2011 11:48:04 +0200
>>>>>> From: "Ufuk Utku Turuncoglu (BE)"<u.utku.turuncoglu@be.itu.edu.tr>
>>>>>> Subject: removing zero dimensions ...
>>>>>> To: NCL USERS<ncl-talk@ucar.edu>
>>>>>> Message-ID:<4DE60AD4.2010102@be.itu.edu.tr>
>>>>>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I just wonder that is there any NCL function or procedure (i could
>>>>
>>>> not
>>>>>>
>>>>>> find in the documentation) that removes the dimensions that it's
>>>>>> actual
>>>>>> length is one (i call it as zero dimension). For example, i have a
>>>>
>>>> 4d
>>>>>>
>>>>>> array and its dimension sizes are "tmp(10, 3, 1, 45)" and i want to
>>>>>> remove the third dimension and the result array would be
>>>>>> "tmp(10,3,45)".
>>>>>> I actually wrote the following function to do that but i just want
>>>>
>>>> to be
>>>>>>
>>>>>> sure it is a generic solution or not
>>>>>>
>>>>>> ;---------------------------------------------------------
>>>>>> ; Removes the zero dimensions from the variable
>>>>>> ; Input:
>>>>>> ; data - original data
>>>>>> ; Output:
>>>>>> ; tmp  - modified data
>>>>>> ;---------------------------------------------------------
>>>>>> undef("rm_empty_dims")
>>>>>> function rm_empty_dims(data:numeric)
>>>>>> begin
>>>>>>    ;--- get dimension size of the data ---
>>>>>>    dims = dimsizes(data)
>>>>>>    rank1 = dimsizes(dims)
>>>>>>
>>>>>>    ;--- find the indices of the non-zero dimensions ---
>>>>>>    indx = ind(dims .ne. 1)
>>>>>>    rank2 = dimsizes(indx)
>>>>>>
>>>>>>    ;--- if zero dimension exist, create new data array ---
>>>>>>    if (rank1 .ne. rank2) then
>>>>>>      tmp = new(dims(indx), typeof(data))
>>>>>>      tmp = data
>>>>>>      return(tmp)
>>>>>>    else
>>>>>>      return(data)
>>>>>>    end if
>>>>>> end
>>>>>>
>>>>>> because, as you can see from the code i could do nothing about
>>>>>> attributes. How can be sure that result field will have correct
>>>>>> metadata? May be additional code can be implemented to ensure that.
>>>>
>>>> Is
>>>>>>
>>>>>> the "tmp = data" operation safe between variables that are in
>>>>>> different
>>>>>> rank (there could be shifting if it is not safe). Also note that the
>>>>>> current version of the code is working in my case.
>>>>>>
>>>>>> --ufuk
>>>>>
>>>>> Ufuk,
>>>>>
>>>>> I've written a function ("squeeze") to drop redundant dimensions and
>>>>
>>>> retain meta data. (See attached).
>>>>>
>>>>> Chad
>>>>> <squeeze.ncl>_______________________________________________
>>>>> ncl-talk mailing list
>>>>> List instructions, subscriber options, unsubscribe:
>>>>>
>>>>
>>>> _______________________________________________
>>>> ncl-talk mailing list
>>>> List instructions, subscriber options, unsubscribe:
>>>>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>> _______________________________________________
>> ncl-talk mailing list
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Wed Jun 1 21:12:27 2011

This archive was generated by hypermail 2.1.8 : Thu Jun 09 2011 - 14:56:48 MDT