Skip to content

Commit

Permalink
【Hackathon 6th No.24】paddle.quantile/nanquantile 功能增强 -part (#6353)
Browse files Browse the repository at this point in the history
  • Loading branch information
Asthestarsfalll authored Mar 27, 2024
1 parent 8ab1cbd commit 8d2c7d9
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 24 deletions.
2 changes: 1 addition & 1 deletion docs/api/paddle/Tensor_cn.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1916,7 +1916,7 @@ prod(axis=None, keepdim=False, dtype=None, name=None)

请参考 :ref:`cn_api_paddle_prod`

quantile(q, axis=None, keepdim=False, name=None)
quantile(q, axis=None, keepdim=False, interpolation='linear', name=None)
:::::::::

返回:计算后的 Tensor
Expand Down
26 changes: 26 additions & 0 deletions docs/api/paddle/nanquantile_cn.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
.. _cn_api_paddle_nanquantile:

nanquantile
-------------------------------

.. py:function:: paddle.nanquantile(x, q, axis=None, keepdim=False, interpolation='linear', name=None)
沿给定的轴 ``axis`` 计算 ``x`` 中元素的分位数, 忽略元素中的 ``NaN`` 。

参数
::::::::::
- **x** (Tensor) - 输入的 Tensor,数据类型为:float32、float64。
- **q** (int|float|list|Tensor) - 待计算的分位数,需要在符合取值范围[0, 1]。如果 ``q`` 是 List 或者 1-D Tensor,其中的每一个 q 分位数都会被计算,并且输出的首维大小与列表或 Tensor 中元素的数量相同。如果 ``q`` 是 0-D Tensor ,则会被当作 float 和 int 对待。
- **axis** (int|list,可选) - 指定对 ``x`` 进行计算的轴。``axis`` 可以是 int 或内部元素为 int 类型的 list。``axis`` 值应该在范围[-D, D)内,D 是 ``x`` 的维度。如果 ``axis`` 或者其中的元素值小于 0,则等价于 :math:`axis + D`。如果 ``axis`` 是 list,对给定的轴上的所有元素计算分位数。如果 ``axis`` 是 None,则对 ``x`` 的全部元素计算分位数。默认值为 None。
- **keepdim** (bool,可选) - 是否在输出 Tensor 中保留减小的维度。如果 ``keepdim`` 为 True,则输出 Tensor 和 ``x`` 具有相同的维度(减少的维度除外,减少的维度的大小为 1)。否则,输出 Tensor 的形状会在 ``axis`` 上进行 squeeze 操作。默认值为 False。
- **interpolation** (str,可选) - 计算分位数的插值方法,可以是 ``linear`` , ``lower`` , ``higher`` , ``nearest`` 或者 ``midpoint`` 。 默认值为 ``linear`` 。
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。

返回
::::::::::
``Tensor``,沿着 ``axis`` 进行分位数计算的结果。与输入数据类型一致。

代码示例
::::::::::

COPY-FROM: paddle.nanquantile
7 changes: 4 additions & 3 deletions docs/api/paddle/quantile_cn.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,22 @@
quantile
-------------------------------

.. py:function:: paddle.quantile(x, q, axis=None, keepdim=False, name=None)
.. py:function:: paddle.quantile(x, q, axis=None, keepdim=False, interpolation='linear', name=None)
沿给定的轴 ``axis`` 计算 ``x`` 中元素的分位数。

参数
::::::::::
- **x** (Tensor) - 输入的 Tensor,数据类型为:float32、float64。
- **q** (int|float|list) - 待计算的分位数,需要在符合取值范围[0, 1]。如果 ``q`` 是 List,其中的每一个 q 分位数都会被计算,并且输出的首维大小与列表中元素的数量相同
- **q** (int|float|list|Tensor) - 待计算的分位数,需要在符合取值范围[0, 1]。如果 ``q`` 是 List 或者 1-D Tensor,其中的每一个 q 分位数都会被计算,并且输出的首维大小与列表或 Tensor 中元素的数量相同。如果 ``q`` 是 0-D Tensor ,则会被当作 float 和 int 对待
- **axis** (int|list,可选) - 指定对 ``x`` 进行计算的轴。``axis`` 可以是 int 或内部元素为 int 类型的 list。``axis`` 值应该在范围[-D, D)内,D 是 ``x`` 的维度。如果 ``axis`` 或者其中的元素值小于 0,则等价于 :math:`axis + D`。如果 ``axis`` 是 list,对给定的轴上的所有元素计算分位数。如果 ``axis`` 是 None,则对 ``x`` 的全部元素计算分位数。默认值为 None。
- **keepdim** (bool,可选) - 是否在输出 Tensor 中保留减小的维度。如果 ``keepdim`` 为 True,则输出 Tensor 和 ``x`` 具有相同的维度(减少的维度除外,减少的维度的大小为 1)。否则,输出 Tensor 的形状会在 ``axis`` 上进行 squeeze 操作。默认值为 False。
- **interpolation** (str,可选) - 计算分位数的插值方法,可以是 ``linear`` , ``lower`` , ``higher`` , ``nearest`` 或者 ``midpoint`` 。 默认值为 ``linear`` 。
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。

返回
::::::::::
``Tensor``,沿着 ``axis`` 进行分位数计算的结果。如果 ``x`` 的数据类型为 float64,则返回值的数据类型为 float64,反之返回值数据类型为 float32
``Tensor``,沿着 ``axis`` 进行分位数计算的结果。与输入数据类型一致

代码示例
::::::::::
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下:

| PyTorch | PaddlePaddle | 备注 |
| ------------- | ------------ |-----------------------------------------------------------------------------------------------------------------------------------|
| q | q | 一个 [0, 1] 范围内的分位数值的标量。当 q 为标量时,参数完全一致。当 q 为一维向量时,PyTorch 支持 q 为 1D Tensor,PaddlePaddle 支持 q 为一维列表。当 torch 的 q 为 1D Tensor 时,需要转写。 |
| q | q | 待计算的分位数。|
| dim | axis | 求乘积运算的维度,仅参数名不一致。 |
| keepdim | keepdim | 是否在输出 Tensor 中保留输入的维度。 |
| interpolation | - | 指定当所需分位数位于两个数据点之间时使用的插值方法,Paddle 无此参数,暂无转写方式。 |

### 转写示例
```python
# 当 q 为向量时
# PyTorch 写法
x.nanquantile(q=torch.tensor([0.5, 0.1], dtype=torch.float64))

# Paddle
x.nanquantile(q=[0.5, 0.1])
```
| interpolation | interpolation | 指定当所需分位数位于两个数据点之间时使用的插值方法。|
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ torch.Tensor.quantile(q, dim=None, keepdim=False, *, interpolation='linear')
### [paddle.Tensor.quantile](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#quantile-q-axis-none-keepdim-false-name-none)

```python
paddle.Tensor.quantile(q, axis=None, keepdim=False, name=None)
paddle.Tensor.quantile(q, axis=None, keepdim=False, interpolation='linear', name=None)
```

PyTorch 相比 Paddle 支持更多其他参数,具体如下:
Expand All @@ -20,4 +20,4 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下:
| q | q |待计算的分位数。 |
| dim | axis |指定对 x 进行计算的轴,仅参数名不一致。|
| keepdim | keepdim |是否在输出 Tensor 中保留减小的维度。|
| interpolation | - |两个数据点的插补取值方法,Paddle 无此参数,暂无转写方式。|
| interpolation | interpolation |两个数据点的插补取值方法|
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ paddle.nanquantile(x,
q,
axis=None,
keepdim=False,
interpolation='linear',
name=None)
```

Expand All @@ -30,16 +31,16 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下:
| q | q | 待计算的分位数。 |
| dim | axis| 指定对 x 进行计算的轴,仅参数名不一致。 |
|keepdim|keepdim| 是否在输出 Tensor 中保留减小的维度。|
|interpolation| - | 当所需分位数位于两个数据点之间时使用的插值方法,Paddle 无此参数,Paddle 暂无转写方式。|
|interpolation| interpolation | 当所需分位数位于两个数据点之间时使用的插值方法|
| out | - | 表示输出的 Tensor,Paddle 无此参数,需要转写。 |


### 转写示例
#### out:指定输出
```python
# PyTorch 写法
torch.nanquantile(torch.tensor([float('nan'), 1., 2., 3.]), 0.6, out=y)
# Pytorch 写法
torch.nanquantile(torch.tensor([float('nan'), 1., 2., 3.]), 0.6, interpolation='linear', out=y)

# Paddle 写法
paddle.assign(paddle.nanquantile(paddle.to_tensor([float('nan'), 1., 2., 3.]), 0.6), y)
paddle.assign(paddle.nanquantile(paddle.to_tensor([float('nan'), 1., 2., 3.]), 0.6, interpolation='linear'), y)
```
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ paddle.quantile(x,
q,
axis=None,
keepdim=False,
interpolation='linear',
name=None)
```

Expand All @@ -30,7 +31,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下:
| q | q | 待计算的分位数。 |
| dim | axis| 指定对 x 进行计算的轴,仅参数名不一致。 |
|keepdim|keepdim| 是否在输出 Tensor 中保留减小的维度。|
|interpolation| - | 当所需分位数位于两个数据点之间时使用的插值方法,Paddle 无此参数,需要转写,Paddle 暂无转写方式|
|interpolation| interpolation | 当所需分位数位于两个数据点之间时使用的插值方|
| out | - | 表示输出的 Tensor,Paddle 无此参数,需要转写。 |


Expand All @@ -41,5 +42,5 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下:
torch.quantile(torch.tensor([0., 1., 2., 3.]), 0.6, interpolation='linear', out=y)

# Paddle 写法
paddle.assign(paddle.quantile(paddle.to_tensor([0., 1., 2., 3.]), 0.6), y)
paddle.assign(paddle.quantile(paddle.to_tensor([0., 1., 2., 3.]), 0.6, interpolation='linear'), y)
```

0 comments on commit 8d2c7d9

Please sign in to comment.