如何计算块中的协方差矩阵?

How to calculate the covariance matrix in blocks?

有一个 Matlab 内置函数 "cov" 可以计算给定矩阵 C 的协方差矩阵。如果C太大,比如1000*60000double,而我的电脑内存不够,就需要写一个函数来计算给定矩阵C的协方差矩阵成块或碎片。我的问题是如何计算blocks/pieces中的协方差矩阵?假设给定矩阵的大小是 1000*60000 double,我的计算机无法使用 "cov" 函数处理。

假设您的意思是您对 1,000 个变量进行了 60,000 次观察,那么您可以分块计算协方差矩阵,然后将它们组合起来:

  1. 将您的观察分成大小为 N 的块。(必须确定 N 以适合您的 RAM)
  2. 计算第 N 个块的协方差
  3. 将第 N 个块与前 N-1 个块的总协方差相结合

Here is a discussion on how you combine covariance matrices. Basically, you want to keep track of both the covariances and means of the chunks as you process them and then combine by exploiting their mean square minus square of the means representation listed in the first property of covariances listed here.