Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【Hackathon 6th No.24】paddle.quantile/nanquantile 功能增强 -part #6353

Merged
merged 9 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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`` 。 默认值为 liner。
Asthestarsfalll marked this conversation as resolved.
Show resolved Hide resolved
- **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`` 。 默认值为 liner。
Asthestarsfalll marked this conversation as resolved.
Show resolved Hide resolved
- **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)
```