# [ncl-talk] Question regarding array averaging

Prashanth Bhalachandran prashanth.bhalachandran at gmail.com
Mon Oct 16 19:44:52 MDT 2017

```Hi Dave,
I tried this too initially. But it is giving erroneous results in terms of dimensionality.

If the initial arrays are : [lev_ | 11]
Then : arr = avg((/a1,a2,a3,a4,a5,a6,a7,a8,a9/))
printVarSummary(arr)

Variable: arr
Type: float
Total Size: 36 bytes
9 values
Number of Dimensions: 2
Dimensions and sizes:	[3] x [3]
Coordinates:
Number Of Attributes: 1
_FillValue :	1e+30

My intent is that I take these 9 [11 dimensioned] vectors and apply a weighted average.
weights = (/0.0625,0.0625,0.0625,0.0625,0.5,0.0625,0.0625,0.0625,0.0625/)

For example, if these a1..a9 were single values, I would do something like
arr = (/ (/a1,a2,a3/), (/a4,a5,a6/), (/a7,a8,a9/)/)
weights = (/ (/0.0625,0.0625,0.0625/), (/0.0625,0.5,0.0625/), (/0.0625,0.0625,0.0625/)/)
output =  dim_avg_wgt(ndtooned(arr),ndtooned(weights),1)

(I know I can avoid the ndtooned, but that’s besides the point). I am finding it hard to translate this procedure when a1 … a9 are vectors of 11 values each instead of one.

> On Oct 16, 2017, at 6:10 PM, Dave Allured - NOAA Affiliate <dave.allured at noaa.gov> wrote:
>
> Prashanth,
>
> All of the original arrays have exactly the same dimensions.  This means you can easily combine them into a single 2-D virtual array, using array constructors (/ ... /).  See the NCL user manual for details.  See if this works.
>
>     result = avg ( (/ a1, a2, a3, a4, a5, a6, a7, a8, a9 /) )
>
> --Dave
>
>
> On Mon, Oct 16, 2017 at 6:05 PM, Prashanth Bhalachandran <prashanth.bhalachandran at gmail.com <mailto:prashanth.bhalachandran at gmail.com>> wrote:
> Hello all,
> I am trying to take an average of nine 1D arrays that I have .. a1 to a9 all of them of the dimension 	[lev | 11]
>
> If my understanding is right, the average functions in NCL doesn’t simply allow you to do avg(a1….a9). Please correct me if I am wrong.
>
> The other way around is that I combine the 9 arrays in to a 11x9 array using a function that Dennis have posted out in the past. Is this the way around it? Or is there a simpler/less computationally intensive way of doing it?
> function combine (x[*], y[*])
> begin
>     nx = dimsizes(x)
>     ny = dimsizes(y)
>     if (nx.eq.my <http://nx.eq.my/>) then
>          xy = new ( (/nx,2/), typeof(x)) ; (row,col)
>          xy(:,0) = (/ x /)
>          xy(:,1) = (/ y /)
>          return (xy)
>     end if
>
>     print("combine error")
>     exit
> end
>
>
> Thank you,
> Prashanth

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20171016/400e3150/attachment.html>
```