Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PCA脚本上的.mat文件输入出现数据帧错误_Python_Pandas_Dataframe_Reshape_Pca - Fatal编程技术网

Python PCA脚本上的.mat文件输入出现数据帧错误

Python PCA脚本上的.mat文件输入出现数据帧错误,python,pandas,dataframe,reshape,pca,Python,Pandas,Dataframe,Reshape,Pca,我试图使用python实现PCA图像压缩,但在其中两行中遇到了问题 我使用的脚本包括sklearn.decomposition、sklearn.preprocessing、scipy.io和其他一些基本包。我的输入是3100 x 10944矩阵(matrix.mat)。矩阵由3100个图像(每个图像有38 x 288个像素)构成,这些图像被展平成一个阵列。它由1-255之间的整数组成。 使用MATLAB将矩阵从.csv转换为.mat。 它没有标题 以下代码由dilloncamp.com提供()

我试图使用python实现PCA图像压缩,但在其中两行中遇到了问题

我使用的脚本包括sklearn.decomposition、sklearn.preprocessing、scipy.io和其他一些基本包。我的输入是3100 x 10944矩阵(matrix.mat)。矩阵由3100个图像(每个图像有38 x 288个像素)构成,这些图像被展平成一个阵列。它由1-255之间的整数组成。 使用MATLAB将矩阵从.csv转换为.mat。 它没有标题

以下代码由dilloncamp.com提供()

我遇到这个错误:

X=pd.DataFrame(X['X'])

KeyError:'X'

这是相当混乱的,因为它在代码的早期部分。 当我使用网站原始输入文件时,它是一个输入,是一个5000 x 1024的矩阵,也由1-255之间的整数组成,工作正常。原始输入也是一堆展平的图像,但它们有更多的图像,5000个,每个是32 x 32(正方形)

据我所知,pandas.dataframe用于网格化我们的输入,但我不太确定(X['X'])的含义。这是什么意思? 为什么他们在整形中使用-1(-1,32,32)

谢谢

编辑: 当我使用网站矩阵文件,并将所有的X改为A时,它给了我同样的错误。我一点也不明白,似乎只有当X被命名为X时它才起作用。 为什么是这样?它是否与sklearn.预处理有关

编辑2: 找到罪犯了! 当我们在matlab中打开.mat文件时,它实际上包含一个具有特定名称的matlab变量。 matlab中的网站文件最初名为ex7faces.mat(您可以通过谷歌搜索并下载)。如果我们在Matlab中打开它,它将作为变量“X”打开。 这就是为什么将['X']更改为['A']不起作用的原因!!
我自己的.mat文件在Matlab中包含“M”变量,现在我可以解决关键错误。

混淆了变量名称,但在
X=sio.loadmat('matrix.mat')
行之后,
X
是一个python
dict
,它应该有一个键
X
。在
.loadmat
之后,
print(X.keys())
@ChrisA print(X.keys())给了我:RangeIndex(start=0,stop=1024,step=1)让事情变得更加混乱,当我使用website.mat文件时,没有错误。我甚至手动减少了矩阵文件以匹配网站文件,但它仍然给了我KeyError:((
from sklearn.decomposition import PCA
from sklearn.preprocessing import normalize
import scipy.io as sio
import matplotlib.image as image
import pandas as pd
import matplotlib.pyplot as plt
#Image is stored in MATLAB dataset
X = sio.loadmat('matrix.mat')
X = pd.DataFrame(X['X'])
#Normalize data by subtracting mean and scaling
X_norm = normalize(X)
#Set pca to find principal components that explain 99%
#of the variation in the data
pca = PCA(.99)
#Run PCA on normalized image data
lower_dimension_data = pca.fit_transform(X_norm)
#Lower dimension data is 5000x353 instead of 5000x1024
lower_dimension_data.shape
#Project lower dimension data onto original features
approximation = pca.inverse_transform(lower_dimension_data)
#Approximation is 5000x1024
approximation.shape
#Reshape approximation and X_norm to 5000x32x32 to display images
approximation = approximation.reshape(-1,32,32)
X_norm = X_norm.reshape(-1,32,32)
for i in range(0,X_norm.shape[0]):
X_norm[i,] = X_norm[i,].T
approximation[i,] = approximation[i,].T
fig4, axarr = plt.subplots(1,2,figsize=(8,8))
axarr[0,0].imshow(X_norm[4999,],cmap='gray')
axarr[0,0].set_title('Original Image')
axarr[0,0].axis('off')
axarr[0,1].imshow(approximation[4999,],cmap='gray')
axarr[0,1].set_title('99% Variation')
axarr[0,1].axis('off')