torch.special#
Created On: Mar 04, 2021 | Last Updated On: Jun 18, 2025
The torch.special module, modeled after SciPy’sspecial module.
Functions#
- torch.special.chebyshev_polynomial_t(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the first kind.
If, is returned. If,is returned. If or the recursion:
is evaluated. Otherwise, the explicit trigonometric formula:
is evaluated.
- torch.special.chebyshev_polynomial_u(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the second kind.
If, is returned. If, is returned. If or, the recursion:
is evaluated. Otherwise, the explicit trigonometric formula:
is evaluated.
- torch.special.chebyshev_polynomial_v(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the third kind.
- torch.special.chebyshev_polynomial_w(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the fourth kind.
- torch.special.digamma(input,*,out=None)→Tensor#
Computes the logarithmic derivative of the gamma function oninput.
- Parameters
input (Tensor) – the tensor to compute the digamma function on
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Note
This function is similar to SciPy’sscipy.special.digamma.
Note
From PyTorch 1.8 onwards, the digamma function returns-Inf for0.Previously it returnedNaN for0.
Example:
>>>a=torch.tensor([1,0.5])>>>torch.special.digamma(a)tensor([-0.5772, -1.9635])
- torch.special.entr(input,*,out=None)→Tensor#
Computes the entropy on
input(as defined below), elementwise.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>a=torch.arange(-0.5,1,0.5)>>>atensor([-0.5000, 0.0000, 0.5000])>>>torch.special.entr(a)tensor([ -inf, 0.0000, 0.3466])
- torch.special.erf(input,*,out=None)→Tensor#
Computes the error function of
input. The error function is defined as follows:- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.erf(torch.tensor([0,-1.,10.]))tensor([ 0.0000, -0.8427, 1.0000])
- torch.special.erfc(input,*,out=None)→Tensor#
Computes the complementary error function of
input.The complementary error function is defined as follows:- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.erfc(torch.tensor([0,-1.,10.]))tensor([ 1.0000, 1.8427, 0.0000])
- torch.special.erfcx(input,*,out=None)→Tensor#
Computes the scaled complementary error function for each element of
input.The scaled complementary error function is defined as follows:- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.erfcx(torch.tensor([0,-1.,10.]))tensor([ 1.0000, 5.0090, 0.0561])
- torch.special.erfinv(input,*,out=None)→Tensor#
Computes the inverse error function of
input.The inverse error function is defined in the range as:- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.erfinv(torch.tensor([0,0.5,-1.]))tensor([ 0.0000, 0.4769, -inf])
- torch.special.exp2(input,*,out=None)→Tensor#
Computes the base two exponential function of
input.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.exp2(torch.tensor([0,math.log2(2.),3,4]))tensor([ 1., 2., 8., 16.])
- torch.special.expit(input,*,out=None)→Tensor#
Computes the expit (also known as the logistic sigmoid function) of the elements of
input.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>t=torch.randn(4)>>>ttensor([ 0.9213, 1.0887, -0.8858, -1.7683])>>>torch.special.expit(t)tensor([ 0.7153, 0.7481, 0.2920, 0.1458])
- torch.special.expm1(input,*,out=None)→Tensor#
Computes the exponential of the elements minus 1of
input.Note
This function provides greater precision than exp(x) - 1 for small values of x.
- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.expm1(torch.tensor([0,math.log(2.)]))tensor([ 0., 1.])
- torch.special.gammainc(input,other,*,out=None)→Tensor#
Computes the regularized lower incomplete gamma function:
where both and are weakly positiveand at least one is strictly positive.If both are zero or either is negative then. in the equation above is the gamma function,
See
torch.special.gammaincc()andtorch.special.gammaln()for related functions.Supportsbroadcasting to a common shapeand float inputs.
Note
The backward pass with respect to
inputis not yet supported.Please open an issue on PyTorch’s Github to request it.- Parameters
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>a1=torch.tensor([4.0])>>>a2=torch.tensor([3.0,4.0,5.0])>>>a=torch.special.gammaincc(a1,a2)tensor([0.3528, 0.5665, 0.7350])tensor([0.3528, 0.5665, 0.7350])>>>b=torch.special.gammainc(a1,a2)+torch.special.gammaincc(a1,a2)tensor([1., 1., 1.])
- torch.special.gammaincc(input,other,*,out=None)→Tensor#
Computes the regularized upper incomplete gamma function:
where both and are weakly positiveand at least one is strictly positive.If both are zero or either is negative then. in the equation above is the gamma function,
See
torch.special.gammainc()andtorch.special.gammaln()for related functions.Supportsbroadcasting to a common shapeand float inputs.
Note
The backward pass with respect to
inputis not yet supported.Please open an issue on PyTorch’s Github to request it.- Parameters
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>a1=torch.tensor([4.0])>>>a2=torch.tensor([3.0,4.0,5.0])>>>a=torch.special.gammaincc(a1,a2)tensor([0.6472, 0.4335, 0.2650])>>>b=torch.special.gammainc(a1,a2)+torch.special.gammaincc(a1,a2)tensor([1., 1., 1.])
- torch.special.gammaln(input,*,out=None)→Tensor#
Computes the natural logarithm of the absolute value of the gamma function on
input.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>a=torch.arange(0.5,2,0.5)>>>torch.special.gammaln(a)tensor([ 0.5724, 0.0000, -0.1208])
- torch.special.hermite_polynomial_h(input,n,*,out=None)→Tensor#
Physicist’s Hermite polynomial.
If, is returned. If,is returned. Otherwise, the recursion:
is evaluated.
- torch.special.hermite_polynomial_he(input,n,*,out=None)→Tensor#
Probabilist’s Hermite polynomial.
If, is returned. If,is returned. Otherwise, the recursion:
is evaluated.
- torch.special.i0(input,*,out=None)→Tensor#
Computes the zeroth order modified Bessel function of the first kind for each element of
input.- Parameters
input (Tensor) – the input tensor
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.i0(torch.arange(5,dtype=torch.float32))tensor([ 1.0000, 1.2661, 2.2796, 4.8808, 11.3019])
- torch.special.i0e(input,*,out=None)→Tensor#
Computes the exponentially scaled zeroth order modified Bessel function of the first kind (as defined below)for each element of
input.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.i0e(torch.arange(5,dtype=torch.float32))tensor([1.0000, 0.4658, 0.3085, 0.2430, 0.2070])
- torch.special.i1(input,*,out=None)→Tensor#
Computes the first order modified Bessel function of the first kind (as defined below)for each element of
input.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.i1(torch.arange(5,dtype=torch.float32))tensor([0.0000, 0.5652, 1.5906, 3.9534, 9.7595])
- torch.special.i1e(input,*,out=None)→Tensor#
Computes the exponentially scaled first order modified Bessel function of the first kind (as defined below)for each element of
input.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.i1e(torch.arange(5,dtype=torch.float32))tensor([0.0000, 0.2079, 0.2153, 0.1968, 0.1788])
- torch.special.laguerre_polynomial_l(input,n,*,out=None)→Tensor#
Laguerre polynomial.
If, is returned. If,is returned. Otherwise, the recursion:
is evaluated.
- torch.special.legendre_polynomial_p(input,n,*,out=None)→Tensor#
Legendre polynomial.
If, is returned. If,is returned. Otherwise, the recursion:
is evaluated.
- torch.special.log1p(input,*,out=None)→Tensor#
Alias for
torch.log1p().
- torch.special.log_ndtr(input,*,out=None)→Tensor#
Computes the log of the area under the standard Gaussian probability density function,integrated from minus infinity to
input, elementwise.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.log_ndtr(torch.tensor([-3.,-2,-1,0,1,2,3]))tensor([-6.6077 -3.7832 -1.841 -0.6931 -0.1728 -0.023 -0.0014])
- torch.special.log_softmax(input,dim,*,dtype=None)→Tensor#
Computes softmax followed by a logarithm.
While mathematically equivalent to log(softmax(x)), doing these twooperations separately is slower and numerically unstable. This functionis computed as:
- Parameters
input (Tensor) – input
dim (int) – A dimension along which log_softmax will be computed.
dtype (
torch.dtype, optional) – the desired data type of returned tensor.If specified, the input tensor is cast todtypebefore the operationis performed. This is useful for preventing data type overflows. Default: None.
Example:
>>>t=torch.ones(2,2)>>>torch.special.log_softmax(t,0)tensor([[-0.6931, -0.6931], [-0.6931, -0.6931]])
- torch.special.logit(input,eps=None,*,out=None)→Tensor#
Returns a new tensor with the logit of the elements of
input.inputis clamped to [eps, 1 - eps] when eps is not None.When eps is None andinput< 0 orinput> 1, the function will yields NaN.- Parameters
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>a=torch.rand(5)>>>atensor([0.2796, 0.9331, 0.6486, 0.1523, 0.6516])>>>torch.special.logit(a,eps=1e-6)tensor([-0.9466, 2.6352, 0.6131, -1.7169, 0.6261])
- torch.special.logsumexp(input,dim,keepdim=False,*,out=None)#
Alias for
torch.logsumexp().
- torch.special.modified_bessel_i0(input,*,out=None)→Tensor#
Modified Bessel function of the first kind of order.
- torch.special.modified_bessel_i1(input,*,out=None)→Tensor#
Modified Bessel function of the first kind of order.
- torch.special.modified_bessel_k0(input,*,out=None)→Tensor#
Modified Bessel function of the second kind of order.
- torch.special.modified_bessel_k1(input,*,out=None)→Tensor#
Modified Bessel function of the second kind of order.
- torch.special.multigammaln(input,p,*,out=None)→Tensor#
Computes themultivariate log-gamma function with dimension element-wise, given by
where and is the Gamma function.
All elements must be greater than, otherwise the behavior is undefined.
- Parameters
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>a=torch.empty(2,3).uniform_(1,2)>>>atensor([[1.6835, 1.8474, 1.1929], [1.0475, 1.7162, 1.4180]])>>>torch.special.multigammaln(a,2)tensor([[0.3928, 0.4007, 0.7586], [1.0311, 0.3901, 0.5049]])
- torch.special.ndtr(input,*,out=None)→Tensor#
Computes the area under the standard Gaussian probability density function,integrated from minus infinity to
input, elementwise.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.ndtr(torch.tensor([-3.,-2,-1,0,1,2,3]))tensor([0.0013, 0.0228, 0.1587, 0.5000, 0.8413, 0.9772, 0.9987])
- torch.special.ndtri(input,*,out=None)→Tensor#
Computes the argument, x, for which the area under the Gaussian probability density function(integrated from minus infinity to x) is equal to
input, elementwise.Note
Also known as quantile function for Normal Distribution.
- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>torch.special.ndtri(torch.tensor([0,0.25,0.5,0.75,1]))tensor([ -inf, -0.6745, 0.0000, 0.6745, inf])
- torch.special.polygamma(n,input,*,out=None)→Tensor#
Computes the derivative of the digamma function on
input. is called the order of the polygamma function.Note
This function is implemented only for nonnegative integers.
- Parameters
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>a=torch.tensor([1,0.5])>>>torch.special.polygamma(1,a)tensor([1.64493, 4.9348])>>>torch.special.polygamma(2,a)tensor([ -2.4041, -16.8288])>>>torch.special.polygamma(3,a)tensor([ 6.4939, 97.4091])>>>torch.special.polygamma(4,a)tensor([ -24.8863, -771.4742])
- torch.special.psi(input,*,out=None)→Tensor#
Alias for
torch.special.digamma().
- torch.special.round(input,*,out=None)→Tensor#
Alias for
torch.round().
- torch.special.scaled_modified_bessel_k0(input,*,out=None)→Tensor#
Scaled modified Bessel function of the second kind of order.
- torch.special.scaled_modified_bessel_k1(input,*,out=None)→Tensor#
Scaled modified Bessel function of the second kind of order.
- torch.special.shifted_chebyshev_polynomial_t(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the first kind.
- torch.special.shifted_chebyshev_polynomial_u(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the second kind.
- torch.special.shifted_chebyshev_polynomial_v(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the third kind.
- torch.special.shifted_chebyshev_polynomial_w(input,n,*,out=None)→Tensor#
Chebyshev polynomial of the fourth kind.
- torch.special.sinc(input,*,out=None)→Tensor#
Computes the normalized sinc of
input.- Parameters
input (Tensor) – the input tensor.
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>t=torch.randn(4)>>>ttensor([ 0.2252, -0.2948, 1.0267, -1.1566])>>>torch.special.sinc(t)tensor([ 0.9186, 0.8631, -0.0259, -0.1300])
- torch.special.softmax(input,dim,*,dtype=None)→Tensor#
Computes the softmax function.
Softmax is defined as:
It is applied to all slices along dim, and will re-scale them so that the elementslie in the range[0, 1] and sum to 1.
- Parameters
input (Tensor) – input
dim (int) – A dimension along which softmax will be computed.
dtype (
torch.dtype, optional) – the desired data type of returned tensor.If specified, the input tensor is cast todtypebefore the operationis performed. This is useful for preventing data type overflows. Default: None.
- Examples::
>>>t=torch.ones(2,2)>>>torch.special.softmax(t,0)tensor([[0.5000, 0.5000], [0.5000, 0.5000]])
- torch.special.spherical_bessel_j0(input,*,out=None)→Tensor#
Spherical Bessel function of the first kind of order.
- torch.special.xlog1py(input,other,*,out=None)→Tensor#
Computes
input*log1p(other)with the following cases.Similar to SciPy’sscipy.special.xlog1py.
Note
At least one of
inputorothermust be a tensor.- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>x=torch.zeros(5,)>>>y=torch.tensor([-1,0,1,float('inf'),float('nan')])>>>torch.special.xlog1py(x,y)tensor([0., 0., 0., 0., nan])>>>x=torch.tensor([1,2,3])>>>y=torch.tensor([3,2,1])>>>torch.special.xlog1py(x,y)tensor([1.3863, 2.1972, 2.0794])>>>torch.special.xlog1py(x,4)tensor([1.6094, 3.2189, 4.8283])>>>torch.special.xlog1py(2,y)tensor([2.7726, 2.1972, 1.3863])
- torch.special.xlogy(input,other,*,out=None)→Tensor#
Computes
input*log(other)with the following cases.Similar to SciPy’sscipy.special.xlogy.
Note
At least one of
inputorothermust be a tensor.- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>x=torch.zeros(5,)>>>y=torch.tensor([-1,0,1,float('inf'),float('nan')])>>>torch.special.xlogy(x,y)tensor([0., 0., 0., 0., nan])>>>x=torch.tensor([1,2,3])>>>y=torch.tensor([3,2,1])>>>torch.special.xlogy(x,y)tensor([1.0986, 1.3863, 0.0000])>>>torch.special.xlogy(x,4)tensor([1.3863, 2.7726, 4.1589])>>>torch.special.xlogy(2,y)tensor([2.1972, 1.3863, 0.0000])
- torch.special.zeta(input,other,*,out=None)→Tensor#
Computes the Hurwitz zeta function, elementwise.
- Parameters
Note
The Riemann zeta function corresponds to the case whenq = 1
- Keyword Arguments
out (Tensor,optional) – the output tensor.
Example:
>>>x=torch.tensor([2.,4.])>>>torch.special.zeta(x,1)tensor([1.6449, 1.0823])>>>torch.special.zeta(x,torch.tensor([1.,2.]))tensor([1.6449, 0.0823])>>>torch.special.zeta(2,torch.tensor([1.,2.]))tensor([1.6449, 0.6449])