python pytorch中是否有类似tf.contrib. distribution. tensorflow百分位数的函数?

6rvt4ljy  于 2022-12-28  发布在  Python
关注(0)|答案(4)|浏览(204)

PyTorch中是否有与Tensorflow的tf.contrib.distributions.percentile功能相同的函数?

ctehm74n

ctehm74n1#

有趣的是,PyTorch似乎没有为此提供任何操作符,至少没有根据它的搜索功能。
不过幸运的是,PyTorch Tensors可以很容易地与NumPy函数一起使用,这样你就可以简单地调用numpy.percentile,见下面的例子:

import torch as t
import numpy as np

x = t.Tensor([1,2,3])
print(np.percentile(x, 30)) # 30-th percentile of x
# 1.6
8fq7wneg

8fq7wneg2#

实际上,icdf函数给出了反累积密度函数值,即百分位值。

import torch
from torch.distributions import Normal
dist = Normal(torch.tensor([0.0]), torch.tensor([1.0]))
dist.icdf(torch.tensor([0.95])).data.numpy()

导致

array([1.6449], dtype=float32)
njthzxwz

njthzxwz3#

我不知道赞成和反对,但有方法使用cupy与pytorch的dlpack:
(cupy不直接支持pytorchTensor,CuPy函数不接受torchTensor。)

import torch
from torch.utils.dlpack import to_dlpack
from torch.utils.dlpack import from_dlpack
import cupy

x = torch.Tensor([1, 2, 3]).cuda()
dx = to_dlpack(x)
cx = cupy.fromDlpack(dx)
print(cupy.percentile(cx, 30)) # 30-th percentile of x
# 1.5999999642372131
monwx1rj

monwx1rj4#

PyTorch的分位数its own implementationnumpy.quantile类似,本质上是analogous to the percentile,但使用十进制值而不是百分位数。
例如,可以按如下方式计算Tensor的第50百分位数:

import torch

input = torch.tensor([1., 2., 3., 4., 5.])
print(torch.quantile(input, 0.5)) # 50-th percentile
# tensor(3.)

相关问题