按元素获取迭代器方差的数值稳定方法是什么?举个例子,我想做类似的事情
var((rand(4,2) for i in 1:10))
并返回一个(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
实现了一些其他算法in DiffEqMonteCarlo.jl以及。我很惊讶我找不到这样的库,但也许有一天会重构它。
关于statistics - 迭代器的逐元素方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43825377/