有没有办法做到这一点?我似乎不能轻易地将pandas系列与绘制CDF联系起来.
我有一个名为的无序列表d
,如下所示:
[0.0000, 123.9877,0.0000,9870.9876, ...]
Run Code Online (Sandbox Code Playgroud)
我只是想通过在Python中使用Matplotlib来绘制基于此列表的cdf图.但是不知道我是否可以使用任何功能
d = []
d_sorted = []
for line in fd.readlines():
(addr, videoid, userag, usertp, timeinterval) = line.split()
d.append(float(timeinterval))
d_sorted = sorted(d)
class discrete_cdf:
def __init__(data):
self._data = data # must be sorted
self._data_len = float(len(data))
def __call__(point):
return (len(self._data[:bisect_left(self._data, point)]) /
self._data_len)
cdf = discrete_cdf(d_sorted)
xvalues = range(0, max(d_sorted))
yvalues = [cdf(point) for point in xvalues]
plt.plot(xvalues, yvalues)
Run Code Online (Sandbox Code Playgroud)
现在我正在使用此代码,但错误消息是:
Traceback (most recent call last):
File "hitratioparea_0117.py", line 43, in <module>
cdf = discrete_cdf(d_sorted) …
Run Code Online (Sandbox Code Playgroud) ecdf(x)(x)
在Numpy或scipy中,R的R 函数相当于什么?是ecdf(x)(x)
基本相同:
import numpy as np
def ecdf(x):
# normalize X to sum to 1
x = x / np.sum(x)
return np.cumsum(x)
Run Code Online (Sandbox Code Playgroud)
还是需要其他东西?
编辑如何控制使用的垃圾箱数量ecdf
?
如何在python中计算累积分布函数(CDF)?
我想从我所拥有的点数(离散分布)计算它,而不是像scipy那样的连续分布.
我需要在几秒钟内读取带有时间戳的长文件,以及使用numpy或scipy的CDF图.我确实试过numpy,但似乎输出不是它应该是什么.以下代码:任何建议表示赞赏.
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('Filename.txt')
sorted_data = np.sort(data)
cumulative = np.cumsum(sorted_data)
plt.plot(cumulative)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我有两个向量,v1
和v2
。我想v2
从的每个值中减去的每个值v1
并将结果存储在另一个向量中。我也想使用非常大的向量(例如1e6大小),因此我认为我应该使用numpy来提高性能。
到目前为止,我有:
import numpy
v1 = numpy.array(numpy.random.uniform(-1, 1, size=1e2))
v2 = numpy.array(numpy.random.uniform(-1, 1, size=1e2))
vdiff = []
for value in v1:
vdiff.extend([value - v2])
Run Code Online (Sandbox Code Playgroud)
这将创建一个包含100个条目的列表,每个条目都是大小为100的数组。尽管如此,我不知道这是否是最有效的方法。我想以尽可能小的对象大小(内存方式)非常快速地计算1e4期望值。
我一直在使用statsmodels.distributions的ECDF(经验累积分布函数)绘制一些数据的CDF.然而,ECDF使用阶梯函数,因此我得到锯齿状的图.
所以我的问题是:scipy或statsmodels是否有没有步进功能的ECDF烘焙?
顺便说一句,我知道我可以这样做:
hist, bin_edges = histogram(b_oz, normed=True)
plot(np.cumsum(hist))
Run Code Online (Sandbox Code Playgroud)
但我没有得到正确的尺度.
谢谢!
我在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
Run Code Online (Sandbox Code Playgroud)
在matlab中,我可以简单地使用:
[f,x] = ecdf(X);
Run Code Online (Sandbox Code Playgroud)
在点x获得cdf(f).这是它的文档.
在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 …
Run Code Online (Sandbox Code Playgroud) python ×9
numpy ×5
scipy ×4
matplotlib ×3
cdf ×2
statistics ×2
bigdata ×1
matlab ×1
pandas ×1
r ×1
series ×1
statsmodels ×1