【发布时间】:2022-01-17 12:59:11
【问题描述】:
我需要计算数据集的样本方差,直到第 n 个元素,例如
x = np.random.randint(1, 7, 10)
--> [5 2 2 5 3 5 2 5 4 2]
快速简便的方法是使用 np.var(x) 或 Welfords 算法的实现,但这些仅计算整个数据集的方差。 对于我的应用,我需要在数组中明智地使用方差元素,以便在第 n 个元素中,它将是与数据集中前 n 个数据点的方差。
例如:
x_var[2]
--> variance of [5 2 2]
--> 1.7320508
x_var[9]
--> variance of [5 2 2 5 3 5 2 5 4 2]
--> 2.0555556
我的解决方案是将数组分成 n 个数组,这样我就可以在每个数组上使用 np.var 来获得运行方差。这可行,但速度非常慢。
for i in range(0,n):
x_var[i] = np.var(x[:i])
我已经快速实现了运行均值,所以我有一个数组,其均值直到第 n 个条目中的第 n 个元素,如果有帮助的话。
在不将数组分割成 n 块的情况下,如何有效且准确地解决这个问题?
【问题讨论】:
-
Idk 关于纯 numpy,但如果您使用 pandas,则有 .rolling(用于相同大小的窗口)和 .expanding(用于像您一样抓取扩展窗口)。 pandas.pydata.org/pandas-docs/stable/reference/api/…
标签: python arrays numpy statistics variance