Source code for utilipy.math
# -*- coding: utf-8 -*-
# ----------------------------------------------------------------------------
#
# TITLE : math
#
# ----------------------------------------------------------------------------
"""Initialization file for math."""
__author__ = "Nathaniel Starkman"
__all__ = [
"quadrature",
]
##############################################################################
# IMPORTS
# GENERAL
from typing import Sequence
import numpy as np
###############################################################################
# CODE
###############################################################################
[docs]def quadrature(*args: Sequence, axis: int = 0) -> Sequence:
"""Return arguments summed in quadrature.
::
sqrt(sum(square(args), axis=axis))
Parameters
----------
args: Sequence
axis: int
the summation axis, default 0.
Returns
-------
array-like
"""
if len(args) == 0:
raise ValueError
if len(args) == 1:
args = args[0]
return np.sqrt(np.sum(np.square(args), axis=axis))
# /def
# ----------------------------------------------------------------------------
# def logsumexp(a: Sequence, axis: int = 0) -> Sequence:
# """Logsumexp.
# Parameters
# ----------
# a : array-like
# axis : int
# the summation axis
# Returns
# -------
# array-like
# References
# ----------
# code modified from galpy
# """
# minarr = np.amax(a, axis=axis)
# if axis == 1:
# minarr = np.reshape(minarr, (a.shape[0], 1))
# if axis == 0:
# minminarr = np.tile(minarr, (a.shape[0], 1))
# elif axis == 1:
# minminarr = np.tile(minarr, (1, a.shape[1]))
# elif axis is None:
# minminarr = np.tile(minarr, a.shape)
# else:
# raise NotImplementedError("logsumexp' not implemented for axis > 2")
# if axis == 1:
# minarr = np.reshape(minarr, (a.shape[0]))
# return minarr + np.log(np.sum(np.exp(a - minminarr), axis=axis))
# /def
###############################################################################
# END