无法将大小为1934的数组重塑为形状(3,1)

时间:2019-10-22 06:47:04

标签: python numpy scatter-matrix

我想在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)”

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环境下也要花费太多时间。我什至无法获得针对数据集的单次迭代的结果。

有没有可用的解决方案来加快速度?