mindspore.nn.DiGamma

class mindspore.nn.DiGamma[source]

Calculates Digamma using Lanczos’ approximation referring to “A Precision Approximation of the Gamma Function”. The algorithm is:

digamma(z+1)=log(t(z))+A(z)/A(z)kLanczosGamma/t(z)t(z)=z+kLanczosGamma+1/2A(z)=kBaseLanczosCoeff+k=1nkLanczosCoefficients[i]z+kA(z)=k=1nkLanczosCoefficients[i]z+k2

However, if the input is less than 0.5 use Euler’s reflection formula:

digamma(x)=digamma(1x)picot(pix)
Inputs:
  • x (Tensor[Number]) - 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.DiGamma()
>>> output = op(x)
>>> print(output)
[0.42278463  0.92278427 1.2561178]