赞
踩
我在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解决方案(最重要的一个),但它看起来似乎不能正常工作。在
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。