nanquantile

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,则等价于 \(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,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

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

代码示例

>>> import paddle

>>> x = paddle.to_tensor(
...     [[0, 1, 2, 3, 4],
...      [5, 6, 7, 8, 9]],
...     dtype="float32")
>>> x[0,0] = float("nan")

>>> y1 = paddle.nanquantile(x, q=0.5, axis=[0, 1])
>>> print(y1)
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
5.)

>>> y2 = paddle.nanquantile(x, q=0.5, axis=1)
>>> print(y2)
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[2.50000000, 7.        ])

>>> y3 = paddle.nanquantile(x, q=[0.3, 0.5], axis=0)
>>> print(y3)
Tensor(shape=[2, 5], dtype=float32, place=Place(cpu), stop_gradient=True,
[[5.        , 2.50000000, 3.50000000, 4.50000000, 5.50000000],
 [5.        , 3.50000000, 4.50000000, 5.50000000, 6.50000000]])

>>> y4 = paddle.nanquantile(x, q=0.8, axis=1, keepdim=True)
>>> print(y4)
Tensor(shape=[2, 1], dtype=float32, place=Place(cpu), stop_gradient=True,
[[3.40000000],
 [8.20000000]])

>>> nan = paddle.full(shape=[2, 3], fill_value=float("nan"))
>>> y5 = paddle.nanquantile(nan, q=0.8, axis=1, keepdim=True)
>>> print(y5)
Tensor(shape=[2, 1], dtype=float32, place=Place(cpu), stop_gradient=True,
[[nan],
 [nan]])