我可以用32位和numpy做特征脸吗?

我可以用32位和numpy做特征脸吗?,numpy,Numpy,我目前正试图用numpy实现eigenfaces,但它似乎在与我的32位Linux系统抗争(我使用32位,因为以前64位对flash和java的支持不好,我的处理器是64位…),因为当试图将两个向量相乘以得到矩阵(向量*转置向量)时,numpy给了我 ValueError: broadcast dimensions too large. 我读到这是由于内存太少,可以用64位解决。有什么办法可以避免这种情况吗?矩阵将是528000*528000个元素。根据我的论文,协方差矩阵需要这个大矩阵(将所

我目前正试图用numpy实现eigenfaces,但它似乎在与我的32位Linux系统抗争(我使用32位,因为以前64位对flash和java的支持不好,我的处理器是64位…),因为当试图将两个向量相乘以得到矩阵(向量*转置向量)时,numpy给了我

ValueError: broadcast dimensions too large.
我读到这是由于内存太少,可以用64位解决。有什么办法可以避免这种情况吗?矩阵将是528000*528000个元素。根据我的论文,协方差矩阵需要这个大矩阵(将所有这些大矩阵相加,然后除以矩阵的个数)

我的代码如下所示(我不明白numpy为什么会给我一个矩阵,因为对于我的矩阵知识来说,它看起来是错误的(水平*垂直),但它适用于较小尺寸的示例):


正如
pv
已经阐述的那样,试图产生如此巨大的协方差矩阵实际上并不可行


但请注意,
phi*phi^T
phi^T*phi
的特征向量(在链接中解释)是相关的,这是使问题更易于管理的关键。有关此主题的更多信息,请参见。

您尝试执行的数学运算是什么?单精度浮点的528000*528000矩阵需要1TB的内存,而您可能没有,因此即使在64位上也无法工作。所以,也许你实际上并不想形成这样一个矩阵,但是从上面的描述很难看出你想做什么,因为我的解释能力太差了。我有一个528000维的向量(每个像素都是我理解的维)。现在我需要创建一个带有
vector*vector^T
(其中T代表向量的转置版本)的矩阵,这将生成一个矩阵。然而,他们通常说eigenface是快速和简单的:/所以可能我搞错了什么。公式是:via,其中Phi是向量。感谢wikipedia链接,我将尝试我能做的。@Aufziehvogel:AFAIU
Eigenface
“算法”非常简单,只需使用
numpy
就可以实现。在探索过程中,请随时提出更具体的问题。谢谢
tmp = []
for face in faces: # just an array of all face vectors (len = 528000)
    diff = np.subtract(averageFace, face)
    diff = np.asmatrix(diff)
    tmp.append(np.multiply(diff, np.transpose(diff)))
C = np.divide(np.sum(tmp, axis=0), len(tmp))