首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyTorch阶乘函数

PyTorch阶乘函数
EN

Stack Overflow用户
提问于 2020-10-01 14:11:30
回答 2查看 1.5K关注 0票数 5

似乎没有计算阶乘的PyTorch函数。在PyTorch中有这样做的方法吗?我希望手动计算火炬中的泊松分布(我知道这是存在的:https://pytorch.org/docs/stable/generated/torch.poisson.html),这个公式需要分母中的阶乘。

泊松分布:分布

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-01 16:15:00

我想你可以找到torch.jit._builtins.math.factorial ,但是 pytorch以及numpyscipy (矮胖与枕骨的阶乘)都使用python的内建math.factorial

代码语言:javascript
复制
import math

import numpy as np
import scipy as sp
import torch


print(torch.jit._builtins.math.factorial is math.factorial)
print(np.math.factorial is math.factorial)
print(sp.math.factorial is math.factorial)
代码语言:javascript
复制
True
True
True

但是,相比之下,scipy除了“主流”math.factorial之外,还包含非常“特殊”的阶乘函数scipy.special.factorial。与来自math模块的函数不同,它对数组进行操作:

代码语言:javascript
复制
from scipy import special

print(special.factorial is math.factorial)
代码语言:javascript
复制
False
代码语言:javascript
复制
# the all known factorial functions
factorials = (
    math.factorial,
    torch.jit._builtins.math.factorial,
    np.math.factorial,
    sp.math.factorial,
    special.factorial,
)

# Let's run some tests
tnsr = torch.tensor(3)

for fn in factorials:
    try:
        out = fn(tnsr)
    except Exception as err:
        print(fn.__name__, fn.__module__, ':', err)
    else:
        print(fn.__name__, fn.__module__, ':', out)
代码语言:javascript
复制
factorial math : 6
factorial math : 6
factorial math : 6
factorial math : 6
factorial scipy.special._basic : tensor(6., dtype=torch.float64)
代码语言:javascript
复制
tnsr = torch.tensor([1, 2, 3])

for fn in factorials:
    try:
        out = fn(tnsr)
    except Exception as err:
        print(fn.__name__, fn.__module__, ':', err)
    else:
        print(fn.__name__, fn.__module__, ':', out)
代码语言:javascript
复制
factorial math : only integer tensors of a single element can be converted to an index
factorial math : only integer tensors of a single element can be converted to an index
factorial math : only integer tensors of a single element can be converted to an index
factorial math : only integer tensors of a single element can be converted to an index
factorial scipy.special._basic : tensor([1., 2., 6.], dtype=torch.float64)
票数 6
EN

Stack Overflow用户

发布于 2020-10-01 14:32:58

内置的math模块(文档)提供了一个函数,它将给定积分的阶乘作为int返回。

代码语言:javascript
复制
import math

x = math.factorial(5)
print(x)
print(type(x))

输出

代码语言:javascript
复制
120
<class 'int'>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64157192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档