相关疑难解决方法(0)

python直方图单行

有很多方法可以编写计算直方图的Python程序.

通过直方图,我的意思是一个函数,它计算a中对象的出现次数iterable并输出字典中的计数.例如:

>>> L = 'abracadabra'
>>> histogram(L)
{'a': 5, 'b': 2, 'c': 1, 'd': 1, 'r': 2}
Run Code Online (Sandbox Code Playgroud)

编写此函数的一种方法是:

def histogram(L):
    d = {}
    for x in L:
        if x in d:
            d[x] += 1
        else:
            d[x] = 1
    return d
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的方法来编写此功能?

如果我们在Python中有字典理解,我们可以写:

>>> { x: L.count(x) for x in set(L) }
Run Code Online (Sandbox Code Playgroud)

但由于Python 2.6没有它们,我们必须写:

>>> dict([(x, L.count(x)) for x in set(L)])
Run Code Online (Sandbox Code Playgroud)

虽然这种方法可以读取,但效率不高:L经过多次.此外,这对单寿命发电机不起作用; 该函数应该对迭代器生成器同样有效,例如:

def gen(L):
    for x in L:
        yield x
Run Code Online (Sandbox Code Playgroud)

我们可能会尝试使用该reduce函数(RIP):

>>> reduce(lambda d,x: dict(d, …
Run Code Online (Sandbox Code Playgroud)

python reduce counting histogram

47
推荐指数
5
解决办法
5万
查看次数

Matplotlib CDF 归零

在尝试使用 matplotlib 的hist函数绘制累积分布函数 (CDF) 时,最后一点回到零。我阅读了一些线程,解释说这是因为直方图格式,但找不到适合我的案例的解决方案。

这是我的代码:

import matplotlib.pyplot as plt

x = [7.845419,7.593756,7.706831,7.256211,7.147965]

fig, ax=plt.subplots()
ax.hist(x, cumulative=True, normed=1, histtype='step', bins=100, label=('Label-1'), lw=2)
ax.grid(True)
ax.legend(loc='upper left')

plt.show()
Run Code Online (Sandbox Code Playgroud)

产生以下图像

在此处输入图片说明

如您所见,在直方图的最后一个 bin 之后阶跃函数变为零,这是不希望的。如何更改我的代码以使 CDF 不会归零?

谢谢

python matplotlib pandas

5
推荐指数
1
解决办法
628
查看次数

标签 统计

python ×2

counting ×1

histogram ×1

matplotlib ×1

pandas ×1

reduce ×1