median

paddle. median ( x, axis=None, keepdim=False, mode='avg', name=None ) [源代码]

沿给定的轴 axis 计算 x 中元素的中位数。

参数

  • x (Tensor) - 输入的 Tensor,数据类型为:float16、float32、float64、int32、int64。

  • axis (int,可选) - 指定对 x 进行计算的轴。axis 可以是 int。axis 值应该在范围 [-D, D) 内,D 是 x 的维度。如果 axis 或者其中的元素值小于 0,则等价于 \(axis + D\)。如果 axis 是 None,则对 x 的全部元素计算中位数。默认值为 None。

  • keepdim (bool,可选) - 是否在输出 Tensor 中保留输入的维度。除非 keepdim 为 True,否则输出 Tensor 的维度将比输入 Tensor 小一维,默认值为 False。

  • mode (str,可选) - 当输入 Tensor xaxis 轴上有偶数个元素时,可选择按照中间两个数的平均值或最小值确定中位数。可选的值是 'avg' 或 'min'。默认为 'avg'。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

Tensor 或 (Tensor, Tensor)。 若 mode == 'avg',返回值是一个中位数 Tensor; 若 mode == 'min'axis 是 None,返回值是一个中位数 Tensor; 若 mode == 'min'axis 不是 None,返回值是两个 Tensor,第一个是中位数,第二个是中位数对应的下标;

mode == 'avg' 时,若 x 的数据类型是 float64,返回值的数据类型则是 float64,其他输入数据类型情况下返回值的数据类型均是 float32; 当 mode == 'min' 时,返回值中,中位数的数据类型与 x 的数据类型一致,下标的数据类型均为 int64。

代码示例

>>> import paddle
>>> import numpy as np

>>> x = paddle.arange(12).reshape([3, 4])
>>> print(x)
Tensor(shape=[3, 4], dtype=int64, place=Place(cpu), stop_gradient=True,
[[0 , 1 , 2 , 3 ],
 [4 , 5 , 6 , 7 ],
 [8 , 9 , 10, 11]])

>>> y1 = paddle.median(x)
>>> print(y1)
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
5.50000000)

>>> y2 = paddle.median(x, axis=0)
>>> print(y2)
Tensor(shape=[4], dtype=float32, place=Place(cpu), stop_gradient=True,
[4., 5., 6., 7.])

>>> y3 = paddle.median(x, axis=1)
>>> print(y3)
Tensor(shape=[3], dtype=float32, place=Place(cpu), stop_gradient=True,
[1.50000000, 5.50000000, 9.50000000])

>>> y4 = paddle.median(x, axis=0, keepdim=True)
>>> print(y4)
Tensor(shape=[1, 4], dtype=float32, place=Place(cpu), stop_gradient=True,
[[4., 5., 6., 7.]])

>>> y5 = paddle.median(x, mode='min')
>>> print(y5)
Tensor(shape=[], dtype=int64, place=Place(cpu), stop_gradient=True,
5)

>>> median_value, median_indices = paddle.median(x, axis=1, mode='min')
>>> print(median_value)
Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
[1, 5, 9])
>>> print(median_indices)
Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
[1, 1, 1])

>>> # cases containing nan values
>>> x = paddle.to_tensor(np.array([[1,float('nan'),3,float('nan')],[1,2,3,4],[float('nan'),1,2,3]]))

>>> y6 = paddle.median(x, axis=-1, keepdim=True)
>>> print(y6)
Tensor(shape=[3, 1], dtype=float64, place=Place(cpu), stop_gradient=True,
[[nan       ],
 [2.50000000],
 [nan       ]])

>>> median_value, median_indices = paddle.median(x, axis=1, keepdim=True, mode='min')
>>> print(median_value)
Tensor(shape=[3, 1], dtype=float64, place=Place(cpu), stop_gradient=True,
[[nan],
 [2. ],
 [nan]])
>>> print(median_indices)
Tensor(shape=[3, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
[[1],
 [1],
 [0]])