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