numpy.ma.MaskedArray.ptp#

方法

ma.MaskedArray.ptp(axis=None, out=None, fill_value=None, keepdims=False)[source]#

沿给定维度返回 (最大值 - 最小值)(即峰峰值)。

警告

ptp 保留数组的数据类型。这意味着对于具有 n 位的带符号整数的输入(例如 np.int8np.int16 等),返回值也是具有 n 位的带符号整数。在这种情况下,大于 2**(n-1)-1 的峰峰值将被返回为负值。以下示例显示了一种解决方法。

参数:
axis{None, int}, 可选

查找峰值的轴。如果为 None(默认值),则使用扁平化数组。

out{None, array_like}, 可选

放置结果的备用输出数组。它必须具有与预期输出相同的形状和缓冲区长度,但类型将在必要时进行强制转换。

fill_value标量或 None, 可选

用于填充掩码值的数值。

keepdimsbool, 可选

如果设置为 True,则被缩减的轴将在结果中保留为大小为一的维度。使用此选项,结果将正确地广播到数组。

返回值:
ptpndarray.

包含结果的新数组,除非指定了 out,在这种情况下将返回对 out 的引用。

示例

>>> import numpy as np
>>> x = np.ma.MaskedArray([[4, 9, 2, 10],
...                        [6, 9, 7, 12]])
>>> x.ptp(axis=1)
masked_array(data=[8, 6],
             mask=False,
       fill_value=999999)
>>> x.ptp(axis=0)
masked_array(data=[2, 0, 5, 2],
             mask=False,
       fill_value=999999)
>>> x.ptp()
10

此示例显示当输入为带符号整数数组时,可能会返回负值。

>>> y = np.ma.MaskedArray([[1, 127],
...                        [0, 127],
...                        [-1, 127],
...                        [-2, 127]], dtype=np.int8)
>>> y.ptp(axis=1)
masked_array(data=[ 126,  127, -128, -127],
             mask=False,
       fill_value=np.int64(999999),
            dtype=int8)

解决方法是使用 view() 方法将结果视为具有相同位宽的无符号整数

>>> y.ptp(axis=1).view(np.uint8)
masked_array(data=[126, 127, 128, 129],
             mask=False,
       fill_value=np.int64(999999),
            dtype=uint8)