1
我已經閱讀了一些我可以在這裏或其他地方找到的問題。我使用stackoverflow上的其他問題編寫了代碼,但它仍然有時不起作用。有三種類型的問題可能發生。我先在這裏寫的代碼,然後將列出的問題:PCA後的2D直方圖的簡單3D條形圖
from matplotlib.mlab import PCA
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import pyplot as plt
fig=plt.figure()
ax=plt.subplot(111,projection='3d')
sample=np.asarray(sample)
result=PCA(sample)
hist, xedges, yedges =np.histogram2d(result.Y[:,0],result.Y[:,1])
x_data, y_data = np.meshgrid(np.arange(hist.shape[1]),np.arange(hist.shape[0]))
x_data = x_data.flatten()
y_data = y_data.flatten()
z_data = hist.flatten()
ax.bar3d(x_data,y_data,np.zeros(len(z_data)),1, 1, z_data)
fig.tight_layout()
fig.savefig('3Dhist.eps')
plt.show()
1 - 首先的問題是以下錯誤:
LinAlgError: SVD did not converge
97
98 def _raise_linalgerror_svd_nonconvergence(err, flag):
---> 99 raise LinAlgError("SVD did not converge")
100
101 def get_linalg_error_extobj(callback):
LinAlgError: SVD did not converge
而且它上升時,我所有的載體共享一個相同的座標,即他們已經躺在同一架飛機上。顯然PCA仍然有可能具有獨特的答案,但它會給出上述錯誤。爲了測試它,你可以設置樣本:
sample=[[ 0., 0.2, 0. ],
[ 0.4, 0.2, 0. ],
[ 0.4, 0.4, 0. ],
[ 0., 0.2, 0. ],
[ 0.6, 0.2, 0. ]]
2- (半解決:請參閱答案一節。)第二個問題是以下警告:
/Users/****/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/mpl_toolkits/mplot3d/axes3d.py:1673: RuntimeWarning: invalid value encountered in divide
for n in normals])
/Users/****/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/colors.py:394: RuntimeWarning: invalid value encountered in greater
if (c.ravel() > 1).any() or (c.ravel() < 0).any():
/Users/****/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/colors.py:394: RuntimeWarning: invalid value encountered in less
if (c.ravel() > 1).any() or (c.ravel() < 0).any():
我不知道這個警告的原因,但這通常會增加我從我的分佈產生的大樣本。
第3-3個問題是我不能以除.png
之外的任何其他格式保存它,否則它不起作用。澄清我正在使用的陣列是numpy.float64
。