【问题标题】:How do you implement ECDF in Python?你如何在 Python 中实现 ECDF?
【发布时间】:2017-12-04 11:41:38
【问题描述】:

我正在尝试从具有第 3 页上的 MATLAB 实现的 paper 实现经验分布函数。这是我的 Python 版本。

我根据NumPy for MATLAB users documentation进行转换,同时考虑到statsmodelsimplementsECDF的方式

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

我得到错误:

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] 应该可以正常工作吗?这是怎么回事?

【问题讨论】:

    标签: python matlab statsmodels ecdf index-error


    【解决方案1】:

    D.shape[0] 将返回行,而不是列:

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

    D.shape[1] 将返回列

    【讨论】:

    • 解决了 OP 中的错误,但现在我得到了IndexError: tuple index out of range。关于为什么会发生这种情况的任何想法?另外,感谢您的澄清。
    • 发生的那一行是for d in xrange(D.shape[1] + 1):
    • 尝试范围而不是 xrange。还是您正在使用大量数据?
    • 您需要先验证 D 是一个矩阵。然后不要通过函数运行它来测试,而只是打印 D 然后打印 D.shape[1] 来测试。
    • matlab 代码是为矩阵编写的。所以你可能需要仔细检查一下。即使您最终不希望它成为一个矩阵,最好还是让它以与 matlab 代码相同的方式工作,然后返回并进行编辑
    猜你喜欢
    • 2012-09-13
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多