【torch.quantile】分位数计算

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

torch.quantile 分位数计算方法

1. 正文

简单讲一句话,计算分位数。

啥玩意是分位数,
简单讲就是,把数据从小到大排序,然后取百分位置的值,就是第几个分位数。

比如,第0.5分位数,就是取排序后中间位置的值。(也是我们的中位数)

第0.25分位数,就是取排序后中间位置的值的前25%位置的值。

第0.75分位数,就是取排序后中间位置的值的后25%位置的值。

第0.1分位数,就是取排序后中间位置的值的前10%位置的值。

第0.9分位数,就是取排序后中间位置的值的后10%位置的值。

2. 代码

2.1 案例一

我们先看一个简单的例子

import torch
import torch.nn.functional as F

x = torch.tensor([1, 2, 3, 4, 5])
quantile = F.quantile(x, 0.5)
print(quantile)

输出:

tensor(3.)

2.2 案例二

x = torch.tensor([2.0,3,4,5,7])


表格:

索引01234
2.03457
# 计算 0.5 分位数(即中位数)
median = torch.quantile(x, 0.5)

median

上面一个5个数,索引是[0,4],那么,
0.5 * 4 = 2,所以,取索引为2的数,即4.0

输出:

tensor(4.)

再进一步,

median = torch.quantile(x, 0.9)

同样的原理,先计算索引,
0.9 * 4 = 3.6,

这次的索引不是整数了,而是小数,所以要找到这个索引左右两侧的值a和b。

索引3.6位于索引3和索引4之间,索引3和4对应的值为5和7。

所以计算:

5 + (7-5)*0.6 = 6.2

输出:

tensor(6.2000)

如果索引不是整数,找到该索引左右两侧的值,进行计算。

如果索引不是整数,找到该索引左右两侧的值,进行计算。

如果索引不是整数,找到该索引左右两侧的值,进行计算。

上面为什么乘以0.6呢,
因为索引3.6,比索引3大0.6,取小数部分,具体可以参考下图。
这是对应的linear插值法。默认 选项

20240729183942

此外还有lowerhighernearestmidpoint方法。

lower: 索引3.6向下取整,即索引3对应的数

20240730091657

higher: 索引3.6向上取整,即索引4对应的数

20240730091820

midpoint: 索引3.6,取索引3和索引4对应数值的平均值。
20240730091911

nearest: 索引3.6最接近的数,即索引4对应的数

20240730092009

3. 小结

torch.quantile函数用于计算张量的分位数,可以指定不同的插值方法来计算非整数索引处的值。默认情况下,使用线性插值法,但也可以选择其他插值方法,如lower、higher、nearest和midpoint。

找到对应的索引,如果索引为整数可以直接获取其值,该值就是分位数!!!

如果索引为小数,找到该索引左右两侧的值,进行计算。

参考

  1. https://pytorch.org/docs/stable/generated/torch.quantile.html#torch-quantile
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡侃有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值