2017-06-30 19 views
0

私はpaperから経験的な分布関数を実装しようとしていますが、これは3ページのMATLAB実装です。ここに私のPythonバージョンがあります。私は、アカウントにどのようにstatsmodelsECDFECDFをPythonでどのように実装しますか?

from statsmodels.distributions.empirical_distribution import ECDF  

def ecdf_representation(D, n): 
    """calculate ECDF from D at n points""" 
    m = np.mean(D) 
    X = [] 
    for d in xrange(D.shape[0] + 1): 
     func = ECDF([D[:, d] + np.random.randn(np.shape(D[:, d])) * 0.01]) 
     ll = func(np.linspace(0, 1, n)) 
     X = [X, ll] 
    X = [X, m] 
    plt.plot(X) 
    plt.show() 
    return X 

をしながら、それはNumPy for MATLAB users documentationに従って変換

私はエラーを取得する:

line 25, in ecdf_representation 
func = ECDF([D[:, d] + np.random.randn(np.shape(D[:, d]))]) 
IndexError: too many indices for array 

D.shape[0]列の数を返しませんか?だから、D[:, d]は正しく動作するはずですか?何が起きてる?

答えて

1

D.shape [0]列、行ではなく返されます。

What does .shape[] do in "for i in range(Y.shape[0])"?

D.shapeは、[1] OPでエラーを解決し、列

+0

を返しますが、今私が手'IndexError:タプルのインデックスが範囲外です'。なぜそれが起こっているのかについての考えはありますか?また、説明をお寄せいただきありがとうございます。 – dirtysocks45

+0

起こっている行は 'for d in xrange(D.shape [1] + 1)です: ' – dirtysocks45

+0

xrangeではなくrangeを試してください。または、膨大な量のデータを使用していますか? – Flynn

関連する問題