Source code for feets.extractors.ext_median_amplitude
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2017-2024, Cabral, Juan
# Copyright (c) 2025, QuatroPe; ClariĆ”, Felipe
# License: MIT
# Full Text:
# https://github.com/quatrope/feets/blob/master/LICENSE
# =============================================================================
# DOC
# =============================================================================
"""Median amplitude extractor."""
# =============================================================================
# IMPORTS
# =============================================================================
import math
import numpy as np
from .extractor import Extractor
from ..libs import doctools
# =============================================================================
# EXTRACTOR CLASS
# =============================================================================
[docs]
class MedianAmplitude(Extractor):
"""Median amplitude extractor.
**MedianAmplitude**
This amplitude is defined as the half of the difference between the median
of the maximum :math:`5%%` and the median of the minimum :math:`5%%`
magnitudes. For a sequence of numbers from :math:`0` to :math:`1000` the
amplitude should be equal to :math:`475.0`.
References
----------
.. [richards2011machine] Richards, J. W., Starr, D. L., Butler, N. R.,
Bloom, J. S., Brewer, J. M., Crellin-Quick, A., ... &
Rischard, M. (2011). On machine-learned classification of variable stars
with sparse and noisy time-series data.
The Astrophysical Journal, 733(1), 10. Doi:10.1088/0004-637X/733/1/10.
See Also
--------
feets.extractors.Amplitude
Examples
--------
Median amplitude of increasing magnitudes from :math:`0` to :math:`1000`:
>>> fs = feets.FeatureSpace(only=['MedianAmplitude'])
>>> features = fs.extract(**lc_incremental)
>>> features[0]
{'MedianAmplitude': np.float64(475.0)}
"""
features = ["MedianAmplitude"]
[docs]
@doctools.doc_inherit(Extractor.extract)
def extract(self, magnitude):
"""
Parameters
----------
magnitude : array-like
"""
N = len(magnitude)
sorted_mag = np.sort(magnitude)
amplitude = (
np.median(sorted_mag[-int(math.ceil(0.05 * N)) :])
- np.median(sorted_mag[0 : int(math.ceil(0.05 * N))])
) / 2.0
return {"MedianAmplitude": amplitude}