Viewing contents of file '../idllib/astron/pro/avg.pro'
FUNCTION AVG,ARRAY,DIMENSION, NAN = NAN, DOUBLE = DOUBLE
;+
; NAME:
; AVG
; PURPOSE:
; Return the average value of an array, or 1 dimension of an array
; EXPLANATION:
; Calculate the average value of an array, or calculate the average
; value over one dimension of an array as a function of all the other
; dimensions.
;
; CALLING SEQUENCE:
; RESULT = AVG( ARRAY, [ DIMENSION, /NAN, /DOUBLE ] )
;
; INPUTS:
; ARRAY = Input array. May be any type except string.
;
; OPTIONAL INPUT PARAMETERS:
; DIMENSION = Optional dimension to do average over, scalar
;
; OPTIONAL KEYWORD INPUT:
; /NAN - Set this keyword to cause the routine to check for occurrences of
; the IEEE floating-point value NaN in the input data. Elements with
; the value NaN are treated as missing data.
; /DOUBLE - By default, if the input Array is double-precision, complex,
; or double complex, the result is of the same type; otherwise,
; the result is floating-point. Use of the /DOUBLE keyword
; forces a double precision output -- this is equivalent to (but
; faster than) first converting the input array to double.
; OUTPUTS:
; The average value of the array when called with one parameter.
;
; If DIMENSION is passed, then the result is an array with all the
; dimensions of the input array except for the dimension specified,
; each element of which is the average of the corresponding vector
; in the input array.
;
; For example, if A is an array with dimensions of (3,4,5), then the
; command B = AVG(A,1) is equivalent to
;
; B = FLTARR(3,5)
; FOR J = 0,4 DO BEGIN
; FOR I = 0,2 DO BEGIN
; B(I,J) = TOTAL( A(I,*,J) ) / 4.
; ENDFOR
; ENDFOR
;
; RESTRICTIONS:
; Dimension specified must be valid for the array passed; otherwise the
; input array is returned as the output array.
; PROCEDURE:
; AVG(ARRAY) = TOTAL(ARRAY)/N_ELEMENTS(ARRAY) when called with one
; parameter.
; MODIFICATION HISTORY:
; William Thompson Applied Research Corporation
; July, 1986 8201 Corporate Drive
; Landover, MD 20785
; Converted to Version 2 July, 1990
; Replace SUM call with TOTAL W. Landsman May, 1992
; Converted to IDL V5.0 W. Landsman September 1997
; Added /NAN keyword W. Landsman July 2000
;-
ON_ERROR,2
S = SIZE(ARRAY)
IF S[0] EQ 0 THEN $
MESSAGE,'Variable must be an array, name= ARRAY'
;
IF N_PARAMS() EQ 1 THEN BEGIN
IF KEYWORD_SET(NAN) THEN NPTS = TOTAL(FINITE(ARRAY)) $
ELSE NPTS = N_ELEMENTS(ARRAY)
AVERAGE = TOTAL(ARRAY, NAN=NAN,DOUBLE = DOUBLE) / NPTS
ENDIF ELSE BEGIN
IF ((DIMENSION GE 0) AND (DIMENSION LT S[0])) THEN BEGIN
IF KEYWORD_SET(NAN) $
THEN NPTS = TOTAL(FINITE(ARRAY),DIMENSION+1,/NAN) $
ELSE NPTS = S[DIMENSION+1]
AVERAGE = TOTAL(ARRAY,DIMENSION+1,NAN=NAN,DOUBLE=DOUBLE) / NPTS
END ELSE $
MESSAGE,'*** Dimension out of range, name= ARRAY'
ENDELSE
;
RETURN, AVERAGE
END