Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 更改尺寸后Matplotlib PCA样本不工作_Python_Numpy_Matplotlib_Pca - Fatal编程技术网

Python 更改尺寸后Matplotlib PCA样本不工作

Python 更改尺寸后Matplotlib PCA样本不工作,python,numpy,matplotlib,pca,Python,Numpy,Matplotlib,Pca,我正在尝试学习如何使用matplotlib.mlabPCA。下面我有以下代码: import numpy as np from matplotlib import pyplot as plt from matplotlib.mlab import PCA as mlabPCA from mpl_toolkits.mplot3d import Axes3D, proj3d np.random.seed(234234782384239784) DIMENSIONS = 3 mu_vec1 =

我正在尝试学习如何使用matplotlib.mlabPCA。下面我有以下代码:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.mlab import PCA as mlabPCA
from mpl_toolkits.mplot3d import Axes3D, proj3d

np.random.seed(234234782384239784)

DIMENSIONS = 3

mu_vec1 = np.array([0 for i in xrange(DIMENSIONS)])
cov_mat1 = np.identity(DIMENSIONS)
class1_sample = np.random.multivariate_normal(mu_vec1, cov_mat1, 20).T
assert class1_sample.shape == (DIMENSIONS, 20)

mu_vec2 = np.array([3 for i in xrange(DIMENSIONS)])
cov_mat2 = np.identity(DIMENSIONS)
class2_sample = np.random.multivariate_normal(mu_vec2, cov_mat2, 20).T
assert class2_sample.shape == (DIMENSIONS, 20)

# Combine the two together
all_samples = np.vstack([class1_sample.T, class2_sample.T])
all_samples = all_samples.T
assert all_samples.shape == (DIMENSIONS, 40)

mlab_pca = mlabPCA(all_samples.T)

# 2d plotting
plt.plot(mlab_pca.Y[0:20, 0],
         mlab_pca.Y[0:20, 1],
         'o', markersize=7, color='blue', alpha=0.5, label='class1')
plt.plot(mlab_pca.Y[20:40, 0],
         mlab_pca.Y[20:40, 1],
         '^', markersize=7, color='red', alpha=0.5, label='class2')

plt.xlabel('x_values')
plt.ylabel('y_values')
plt.xlim([-4, 4])
plt.ylim([-4, 4])
plt.legend()
plt.title('Transformed samples with class labels from matplotlib.mlab.PCA()')

plt.show()
正如你所看到的,PCA工作得非常好,我得到以下图表:

但是,当我尝试更改
维度=100
(我尝试模拟光谱数据分析)时,我得到了以下错误:

RuntimeError: we assume data in a is organized with numrows>numcols
“好的,当然,我可以把PCA应用到这个矩阵的转置上。”我天真地告诉自己

我的情节看起来完全不对劲!


我做错什么了吗?或者说,增加那么多维度实际上是在搞乱我的数据吗

我不希望这两个点分开。PCA(X)和PCA(X.T)不是一回事

似乎要求numrows>numcols是matplotlib PCA的一个限制。 R的prcomp和Python都可以使用numrows>numcols或numcols>numrows获取矩阵

DIMENSIONS = 100
...        
mlab_pca = mlabPCA(all_samples)

plt.plot(mlab_pca.Y[0, 0:20],
         mlab_pca.Y[1, 0:20],
         'o', markersize=7, color='blue', alpha=0.5, label='class1')
plt.plot(mlab_pca.Y[0, 20:40],
         mlab_pca.Y[1, 20:40],
         '^', markersize=7, color='red', alpha=0.5, label='class2')
...