mars.tensor.std#
- mars.tensor.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=None, combine_size=None)[来源]#
计算指定轴上的标准偏差。
返回标准差,分布的扩散度量, tensor 元素的标准差默认为扁平化 tensor 计算,否则在指定的轴上计算。
- Parameters
a (array_like) – 计算这些值的标准差。
axis (None 或 int 或 tuple 的 ints, 可选) –
计算标准差的轴。默认情况下,计算扁平化张量的标准差。
如果这是一个整数的元组,则将在多个轴上执行标准差,而不是像以前那样在单个轴或所有轴上执行。
dtype (dtype, 可选) – 用于计算标准差的类型。对于整型张量,默认值为 float64,对于浮点类型张量,默认为与数组类型相同。
out (张量, 可选) – 替代输出张量,用于放置结果。它必须具有与预期输出相同的形状,但类型(计算值的类型)将在必要时进行转换。
ddof (int, 可选) – 表示自由度的增量。计算中使用的除数是
N - ddof,其中N代表元素的数量。默认情况下 ddof 为零。keepdims (bool, 可选) –
如果设置为 True,则被缩减的轴在结果中保留为大小为1的维度。使用此选项,结果将正确地与输入张量广播。
如果传递默认值,则 keepdims 不会被传递到 Tensor 子类的 std 方法中,但任何非默认值将会被传递。如果子类的 sum 方法未实现 keepdims,将引发任何异常。
combine_size (int, 可选) – 拼接的块数。
- Returns
standard_deviation – 如果 out 是 None,返回一个包含标准差的新张量,否则返回对输出数组的引用。
- Return type
张量,请参见上面的 dtype 参数。
备注
标准差是离均值的平方偏差的平均值的平方根,即,
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 mars.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