什么是数值稳定的方法来获取迭代器元素的方差?举个例子,我想做点什么
var((rand(4,2) for i in 1:10))
Run Code Online (Sandbox Code Playgroud)
并找回一个(4,2)矩阵,该矩阵是每个系数的方差.这使用Julia的Base引发错误var.有没有可以处理这个的包?或者使用Base Julia功能轻松(并且存储效率)这样做?或者需要自己开发吗?
我继续并实施了一个Welford算法来计算:
# Welford algorithm
# https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
function componentwise_meanvar(A;bessel=true)
x0 = first(A)
n = 0
mean = zero(x0)
M2 = zero(x0)
delta = zero(x0)
delta2 = zero(x0)
for x in A
n += 1
delta .= x .- mean
mean .+= delta./n
delta2 .= x .- mean
M2 .+= delta.*delta2
end
if n < 2
return NaN
else
if bessel
M2 .= M2 ./ (n .- 1)
else
M2 .= M2 ./ n
end
return mean,M2
end
end
Run Code Online (Sandbox Code Playgroud)
其他一些算法也在DiffEqMonteCarlo.jl中实现.我很惊讶我找不到这个库,但也许有一天会重构它.