maxframe.tensor.std#

maxframe.tensor.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=None)[源代码]#

沿指定轴计算标准差。

返回标准差,即张量元素分布的离散程度的度量。默认情况下,标准差是针对展平后的张量计算的,否则在指定轴上计算。

参数:
  • a (array_like) -- 计算这些值的标准差。

  • axis (None or int or tuple of ints, optional) -- 计算标准差所沿的轴或轴集。默认是对展平后的张量计算标准差。如果这是一个整数元组,则在多个轴上执行标准差计算,而不是像以前一样在单个轴或所有轴上进行。

  • dtype (dtype, optional) -- 用于计算标准差的数据类型。对于整数类型的张量,默认为 float64,对于浮点类型的张量,它与数组类型相同。

  • out (Tensor, optional) -- 用于放置结果的替代输出张量。它必须与期望输出具有相同的形状,但如果需要,计算值的类型将被强制转换。

  • ddof (int, optional) -- 表示自由度偏差。计算中使用的除数是 N - ddof,其中 N 表示元素的数量。默认情况下 ddof 为零。

  • keepdims (bool, optional) -- 如果设置为 True,则在结果中保留被规约的轴,其大小为一。使用此选项时,结果将能够与输入张量正确广播。如果传递的是默认值,则 keepdims 不会传递给 Tensor 子类的 std 方法,但任何非默认值都会传递。如果子类的 sum 方法未实现 keepdims,则会引发异常。

返回:

standard_deviation -- 如果 out 为 None,则返回一个包含标准差的新张量,否则返回对输出数组的引用。

返回类型:

Tensor, see dtype parameter above.

备注

标准差是均值平方偏差的平方根,即 std = sqrt(mean(abs(x - x.mean())**2))

平均平方偏差通常计算为 x.sum() / N,其中 N = len(x)。但如果指定了 ddof,则使用除数 N - ddof。在标准统计实践中,ddof=1 提供了无限总体方差的无偏估计。ddof=0 提供了正态分布变量方差的最大似然估计。此函数中计算的标准差是估计方差的平方根,因此即使使用 ddof=1,它本身也不是标准差的无偏估计。

注意,对于复数,std 在平方之前取绝对值,因此结果始终为实数且非负。

对于浮点数输入,std 使用与输入相同的精度进行计算。根据输入数据的不同,这可能导致结果不准确,特别是对于 float32(见下面的示例)。通过使用 dtype 关键字指定更高精度的累加器可以缓解此问题。

示例

>>> import maxframe.tensor as mt
>>> a = mt.array([[1, 2], [3, 4]])
>>> mt.std(a).execute()
1.1180339887498949
>>> mt.std(a, axis=0).execute()
array([ 1.,  1.])
>>> mt.std(a, axis=1).execute()
array([ 0.5,  0.5])

在单精度下,std() 可能不准确:

>>> a = mt.zeros((2, 512*512), dtype=mt.float32)
>>> a[0, :] = 1.0
>>> a[1, :] = 0.1
>>> mt.std(a).execute()
0.45000005

在 float64 中计算标准差更准确:

>>> mt.std(a, dtype=mt.float64).execute()
0.44999999925494177