matlab ecdf与cdf,python中的经验cdf类似于matlab的on

博客作者正在尝试将MATLAB代码转换为Python,特别是涉及计算累积分布函数(CDF)的部分。在MATLAB中,这个过程相对直接,但在Python中,他们使用了`statsmodels`库的`ECDF`函数,但结果并不理想。作者遇到了绘图不流畅的问题,认为可能是对`ECDF`函数的理解不足。他们已经尝试了一个解决方案,但似乎没有达到预期效果。
摘要由CSDN通过智能技术生成

我在matlab中有一些代码,我想重写成python。这是一个简单的程序,可以计算一些分布,并以双对数标度绘制。在

我遇到的问题是计算cdf。以下是matlab代码:for D = 1:10

delta = D / 10;

for k = 1:n

N_delta = poissrnd(delta^-alpha,1);

Y_k_delta = ( (1 - randn(N_delta)) / (delta.^alpha) ).^(-1/alpha);

Y_k_delta = Y_k_delta(Y_k_delta > delta);

X(k) = sum(Y_k_delta);

%disp(X(k))

end

[f,x] = ecdf(X);

plot(log(x), log(1-f))

hold on

end

在matlab one中,我可以简单地使用:

^{pr2}$

在x点得到cdf(f).Here是它的文档。

在python中,它更复杂:import numpy as np

from scipy.stats import norm

import matplotlib.pyplot as plt

from statsmodels.distributions.empirical_distribution import ECDF

alpha = 1.5

n = 1000

X = []

for delta in range(1,5):

delta = delta/10.0

for k in range(1,n + 1):

N_delta = np.random.poisson(delta**(-alpha), 1)

Y_k_delta = ( (1 - np.random.random(N_delta)) / (delta**alpha) )**(-1/alpha)

Y_k_delta = [i for i in Y_k_delta if i > delta]

X.append(np.sum(Y_k_delta))

ecdf = ECDF(X)

x = np.linspace(min(X), max(X))

f = ecdf(x)

plt.plot(np.log(f), np.log(1-f))

plt.show()

这让我的情节看起来很奇怪,绝对不像matlab的那样流畅。

我认为问题是我不理解ECDF函数,或者它的工作方式与在matlab中不同。

我为我的python代码实现了this解决方案(最重要的一个),但它看起来似乎不能正常工作。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值