我想在python中为形状为(1934,32)的数据集构建自己的PCA。 numpy数组(二进制图像文件)。在PCA中,我需要计算散度矩阵。我有一个代码,可以很好地处理图像和大小为(3,x)的数组。但不适用于我的。
我尝试将np.zeros重塑为32和1934,但是没有任何效果。这是我现在正在使用的代码的一瞥
for i in range(X.shape[1]):
scatter_matrix += (X[:,i].reshape(3,1) - mean_vector).dot((X[:,i].reshape(3,1) - mean_vector).T)
print('Scatter Matrix:\n', scatter_matrix)
错误是“无法将大小为1934的数组转换为形状(3,1)”
答案 0 :(得分:-1)
我找到了一个解决方案,方法是添加一个尺寸为(1934,1934)而不是(3,1)的散布矩阵。而且目前工作正常。代码如下所示
scatter_matrix = np.zeros((1934,1934))
for i in range(X.shape[1]):
print('first',i)
A = X[:,i].reshape(1934,1) - mean
#print(A)
B = (X[:,i].reshape(1934,1) - mean).T
#print(B)
sb = A.dot(B)
print(sb)
#scatter_matrix += (A).dot(B)
#print(i)
print('Scatter Matrix:\n', scatter_matrix)
但是,现在我被上面代码中的点积计算所困扰。 即使在Kaggle GPU环境下也要花费太多时间。我什至无法获得针对数据集的单次迭代的结果。
有没有可用的解决方案来加快速度?