mindspore.nn.LGamma
- class mindspore.nn.LGamma[source]
Calculates LGamma using Lanczos’ approximation referring to “A Precision Approximation of the Gamma Function”. The algorithm is:
\[\begin{split}\begin{array}{ll} \\ lgamma(z + 1) = \frac{(\log(2) + \log(pi))}{2} + (z + 1/2) * log(t(z)) - t(z) + A(z) \\ t(z) = z + kLanczosGamma + 1/2 \\ A(z) = kBaseLanczosCoeff + \sum_{k=1}^n \frac{kLanczosCoefficients[i]}{z + k} \end{array}\end{split}\]However, if the input is less than 0.5 use Euler’s reflection formula:
\[lgamma(x) = \log(pi) - lgamma(1-x) - \log(abs(sin(pi * x)))\]And please note that
\[lgamma(+/-inf) = +inf\]Thus, the behaviour of LGamma follows:
when x > 0.5, return log(Gamma(x))
when x < 0.5 and is not an integer, return the real part of Log(Gamma(x)) where Log is the complex logarithm
when x is an integer less or equal to 0, return +inf
when x = +/- inf, return +inf
- Inputs:
x (Tensor) - The input tensor. Only float16, float32 are supported.
- Outputs:
Tensor, has the same shape and dtype as the x.
- Raises
TypeError – If dtype of x is neither float16 nor float32.
- Supported Platforms:
Ascend
GPU
Examples
>>> x = Tensor(np.array([2, 3, 4]).astype(np.float32)) >>> op = nn.LGamma() >>> output = op(x) >>> print(output) [3.5762787e-07 6.9314754e-01 1.7917603e+00]