计算数组中每个元素与平均值的平方偏差

Calculate squared deviation from the mean for each element in array

我有一个形状为 (128,116,116,1) 的数组,其中第一个维度是受试者的数量,第二个和第三个维度是数据。

我试图计算每个位置的方差(与平均值的平方偏差)(即:在 (0,0)、(0,1)、(1,0) 等...直到 ( 116,116)) 对于所有 128 个受试者,得到一个形状为 (116,116).

的数组

谁能告诉我如何实现这个?

谢谢!

假设我们有一个多维列表 a,形状为 (3,2,2)

import numpy as np
a =
[
    [
        [1,1],
        [1,1]
    ],
    [
        [2,2],
        [2,2]
    ],
    [
        [3,3],
        [3,3]
    ],
]

np.var(a, axis = 0) # results in:
> array([[0.66666667, 0.66666667],
>        [0.66666667, 0.66666667]])

如果你想有效地计算 所有 128 个主题的方差(这将是轴 0),我看不出有什么方法可以使用statistics 包,因为它不将多列表作为输入。所以你必须自己写 code/logic 并在主题上添加循环。
但是,使用 numpy.var 函数,我们可以轻松计算所有 128 个受试者中每个 'datapoint'(指数元组)的方差。


旁注: 你提到了 statistics.variance。但是,仅当您按照链接的文档中提到的那样从总体中抽取样本时才使用它。如果你要走手动路线,你会使用 statistics.pvariance 代替,因为我们是在整个数据集上计算它。 区别可以在这里看到:

statistics.pvariance([1,2,3])
> 0.6666666666666666 # (correct)
statistics.variance([1,2,3])
> 1 # (incorrect)
np.var([1,2,3])
> 0.6666666666666666 # (np.var also gives the correct output)