我有一个Python脚本,需要经常更新均值和协方差矩阵。我目前所做的是,每次我得到一个新的数据点$x$(一个向量),我会重新计算平均值和协方差,如下所示:
data.append(x) # My `data` is just a list of lists of floats (i.e., x is a list of floats)
self.mean = np.mean( data, axis=0) # self.mean is a list representing the center of data
self.cov = np.cov( data, rowvar=0)
问题是这对我来说不够快。有没有办法通过增量更新mean
和{data
重新计算它们来提高效率吗?在
计算意味着增量应该很容易,我可以解决它。我的主要问题是如何更新协方差矩阵self.cov
。在
我刚刚发现我们可以很容易地使用mdp库来实现这一点 http://mdp-toolkit.sourceforge.net/api/mdp.utils.CovarianceMatrix-class.html
对于方差(仅协方差矩阵的对角线),它很简单。您还需要保留数据的平方和。回想一下方差的公式是:Var(x)=E[x^2]-(E[x])^2)。所以每一步你都在计算你的常规平均值,和平方和的平均值。在
这可以推广到多元变量的全协方差矩阵。看看here。在
我会通过记录平方和和来完成。在
在
__init__
中:然后在附录中:
^{pr2}$注意
[:,np.newaxis]
广播以找到每对元素的产生相关问题 更多 >
编程相关推荐