Statistics

Getting Started

minmax

The minmax() function returns the minimum and maximum values of an array (or along an array axis):

>>> import numpy as np
>>> from astroimtools import minmax
>>> np.random.seed(12345)
>>> data = np.random.random((3, 3))
>>> data  
array([[0.92961609, 0.31637555, 0.18391881],
       [0.20456028, 0.56772503, 0.5955447 ],
       [0.96451452, 0.6531771 , 0.74890664]])
>>> minmax(data)  
(0.18391881167709445, 0.9645145197356216)

minmax() also accepts a mask array to ignore certain data values:

>>> mask = (data < 0.3)
>>> mask
array([[False, False,  True],
       [ True, False, False],
       [False, False, False]]...)

>>> minmax(data, mask=mask)  
(0.3163755545817859, 0.9645145197356216)

The minimum and maximum can also be determined along a particular axis:

>>> minmax(data, axis=1)  
(array([0.18391881, 0.20456028, 0.6531771 ]),
 array([0.92961609, 0.5955447 , 0.96451452]))

nddata_stats

The nddata_stats() function calculates various statistics on NDData objects. Sigma-clipped statistics can be calculated by inputting a SigmaClip instance to the sigma_clip keyword. The currently available statistics are:

  • 'mean'

  • 'median'

  • 'mode'

  • 'std'

  • 'mad_std'

  • 'npixels'

  • 'nrejected' (number of pixels rejected by masking or sigma clipping)

  • 'min'

  • 'max'

  • 'biweight_location'

  • 'biweight_midvariance'

  • 'kurtosis'

  • 'skew'

Here is a simple example:

>>> import numpy as np
>>> from astropy.nddata import NDData
>>> from astroimtools import nddata_stats
>>> data = np.arange(10)
>>> data[0] = 100.
>>> nddata = NDData(data)
>>> columns = ['mean', 'median', 'mode', 'std', 'mad_std', 'min', 'max']
>>> tbl = nddata_stats(nddata, columns=columns)
>>> for col in tbl.colnames:
...     tbl[col].info.format = '%.8g'  # for consistent table output
>>> print(tbl)
mean median  mode    std     mad_std  min max
---- ------ ----- --------- --------- --- ---
14.5    5.5 -12.5 28.605069 3.7065055   1 100

Multiple NDData objects can be input as a list, resulting in a multi-row output table:

>>> nd1 = NDData(np.arange(10))
>>> nd2 = NDData(np.arange(20))
>>> tbl = nddata_stats([nd1, nd2], columns=columns)
>>> for col in tbl.colnames:
...     tbl[col].info.format = '%.8g'  # for consistent table output
>>> print(tbl)
mean median mode    std     mad_std  min max
---- ------ ---- --------- --------- --- ---
 4.5    4.5  4.5 2.8722813 3.7065055   0   9
 9.5    9.5  9.5 5.7662813 7.4130111   0  19

Sigma-clipped statistics can be calculated by specifying the sigma_clip keyword. For this example, let’s sigma clip at 2.5 standard deviations:

>>> np.random.seed(12345)
>>> arr1 = np.random.random((100, 100))
>>> arr1[40:50, 40:50] = 400
>>> arr2 = np.random.random((100, 100))
>>> arr2[40:50, 40:50] = 500
>>> nd1 = NDData(arr1)
>>> nd2 = NDData(arr2)
>>> from astropy.stats import SigmaClip
>>> sigclip = SigmaClip(sigma=3.)
>>> columns = ['npixels', 'nrejected', 'mean', 'median', 'std']
>>> tbl = nddata_stats([nd1, nd2], sigma_clip=sigclip, columns=columns)
>>> for col in tbl.colnames:
...     tbl[col].info.format = '%.8g'  # for consistent table output
>>> print(tbl)
npixels nrejected    mean      median      std
------- --------- ---------- ---------- ----------
   9900       100 0.50248733 0.50248009 0.28986151
   9900       100 0.50090826 0.50219234 0.28983063

Reference/API

Statistics tools.

Functions

minmax(data[, mask, axis])

Return the minimum and maximum values of an array (or along an array axis).

nddata_stats(nddata[, sigma_clip, columns, ...])

Calculate various statistics on the input data.

Classes

NDDataStats(nddata[, sigma_clip, ...])

Class to calculate (sigma-clipped) image statistics on NDData objects.

Class Inheritance Diagram

Inheritance diagram of astroimtools.stats.NDDataStats