# dim_avg_wgt

Computes the weighted average of a variable's rightmost dimension at all other dimensions.

## Prototype

function dim_avg_wgt ( x : numeric, w [*] : numeric, opt [1] : integer ) return_val : float or double

## Arguments

*x*

A variable of numeric type and any dimensionality. Missing values are indicated by the _FillValue attribute.

*w*

A one dimensional array of weights. The length must the same as the
right dimension of *x*

*opt*

A scalar: (a) opt=0 means compute the weighted average only if all values are not missing; (b) opt=1 means compute the weighted mean of all non-missing values; (c) opt>1 means to return the mean only if the number of non-missing values is greater-then or equal to opt.

## Return value

The output will be double if *x* is double, and float otherwise.

The output dimensionality is the same as the first *n*-2 dimensions
of the input variable. That is, the dimension rank of the input variable
will be reduced by one.

## Description

The **dim_avg_wgt** function computes
the weighted average of all elements of
the *n*-1th (rightmost) dimension for each index of the
dimensions 0...*n*-2.

Basically, the following is done for the rightmost dimension.

xAvg=SUM[x*w]/SUM[w]

**The weighting is strictly positional.**EG: If x@_FillValue=1e20, and the rightmost dimension is of size 5 and the values are (/3.7, 1e20, 14.3, 1e20, 7.1 /) with weights (/1,3,5,3,1/) then the result will be

(3.7*1 + 14.3*5 + 7.1*1)/(1+5+1) = 11.757

Use **dim_avg_wgt_n** if you want to specify which
dimension to do the weighted average across.

Use **dim_avg_wgt_Wrap**
if retention of metadata is desired.

## See Also

**dim_avg_wgt_Wrap** ,
**dim_avg_wgt_n**,
**dim_avg**,
**avg**,
**dim_median**, **dim_stddev**,
**dim_num**, **dim_product**,
**dim_rmsd**, **dim_rmvmean**,
**dim_rmvmed**, **dim_standardize**,
**dim_stat4**, **dim_stddev**,
**dim_sum**, **dim_variance**

## Examples

**Example 1**

Let z(12,nlat,mlon) contain monthly means and with named dimensions "time", "lat" and "lon", respectively. Compute the weighted annual mean at each lat/lon point. Use dimension reordering to make time the rightmost dimension.

**Note**: in V5.1.1, you will be able to use
**dim_avg_wgt_n** to avoid having to reorder your data.

wgt = (/0.08493151, 0.076712325, 0.08493151, 0.08219178 \ ; same size as dimension "time" ,0.08493151, 0.08219178 , 0.08493151, 0.08493151 \ ,0.08219178, 0.08493151 , 0.08219178, 0.08493151 /) zAnn =Generally, users prefer that the returned variable have metadata associated with it. This can be accomplished via thedim_avg_wgt( z(lat|:,lon|:,time|:), wgt, 0 ) ; ==> zAnn(nlat,mlon) zAnn =dim_avg_wgt_n( z, wgt, 0, 0) ; no reordering needed

**dim_avg_wgt_Wrap**function.

**Example 2**

Let T(time,lev,lat,lon). Compute the weighted vertical average total at each time/lat/lon point. Use dimension reordering to make level the rightmost dimension.

wgt = (/50,50,100,100,100,50,25,10/) ; same size as dimension "lev" Tavg =dim_avg_wgt( T(time|:,lat|:,lon|:,lev|:), wgt, 0 ) ; ==> Tavg(time,lat,lon) Tavg =dim_avg_wgt_n( T, wgt, 0, 1 ) ; no reordering needed