Python 在numpy协方差中,ValueError:数组太大

Python 在numpy协方差中,ValueError:数组太大,python,arrays,numpy,Python,Arrays,Numpy,我试着用numpy求特征值和向量 我得到了协方差函数的误差,数据包含39906列的数据 和200行。 正如你所看到的,这个数组太大了, 谁能告诉我如何使cov与大变量一起工作 import numpy as nm .... eigeVal, raw_eigeVec = nm.linalg.eig(nm.cov(nm.matrix(data_mat,dtype=object))) File "pca.py", line 61, in find_eagen eigeVal, raw

我试着用numpy求特征值和向量

我得到了协方差函数的误差,数据包含39906列的数据 和200行。 正如你所看到的,这个数组太大了, 谁能告诉我如何使cov与大变量一起工作

import numpy as nm
....
eigeVal, raw_eigeVec = nm.linalg.eig(nm.cov(nm.matrix(data_mat,dtype=object)))




 File "pca.py", line 61, in find_eagen
    eigeVal, raw_eigeVec = nm.linalg.eig(nm.cov(nm.matrix(data_mat,dtype=object)))
 File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 1766, in cov
     return (dot(X, X.T.conj()) / fact).squeeze()
 **ValueError: array is too big.**

你有多少记性?您正在尝试创建一个39906 x 39906矩阵-即1592488836个元素。假设您的数组是float64,这将需要大约12GB的内存。您确定不需要
X.t
的协方差矩阵,这将是一个200x200数组吗?
X
的行和列对应什么?您正在进行主成分分析(PCA),如果您的数据是稀疏的,您可能可以使用
sklearn
中的方法,提供可以处理稀疏矩阵的PCA变体。例如:@ali_m I只有4GB内存,X.T出现在cov的numpy库计算中。所以我不知道X是什么。是
data\u mat.shape
真的
(20039906)
?根据您发布的几行代码,如果它的形状是
(39906200)
,我希望看到这个错误。您可能应该使用
pdb
设置断点并进行检查。