2014-01-17 120 views
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

回答