Python 建立直方图
我正在尝试用python制作直方图。我从以下片段开始:Python 建立直方图,python,histogram,Python,Histogram,我正在尝试用python制作直方图。我从以下片段开始: def histogram(L): d = {} for x in L: if x in d: d[x] += 1 else: d[x] = 1 return d 我知道它是用字典功能来解决这个问题的。 但是我对第四行感到困惑:如果x在d中: d是要构造的,d中还没有任何东西,那么为什么x在d中呢?如果x不在d中,那么它被放入d中,d[
def histogram(L):
d = {}
for x in L:
if x in d:
d[x] += 1
else:
d[x] = 1
return d
我知道它是用字典功能来解决这个问题的。
但是我对第四行感到困惑:如果x在d中:
d是要构造的,d中还没有任何东西,那么为什么x在d中呢?如果x不在d中,那么它被放入d中,d[x]=1。基本上,如果x多次出现在d中,它会增加与x匹配的数字
试着用这个单步执行代码:如果x不在d中,那么它将被放入d中,d[x]=1。基本上,如果x多次出现在d中,它会增加与x匹配的数字
请尝试使用此选项逐步查看代码:请记住,如果
在for
循环中,则
因此,当您查看L
中的第一个项目时,d
中没有任何内容,但是当您进入L
中的下一个项目时,在d
中有一些内容,因此您需要检查是否在直方图上创建一个新的仓位(d[x]=1
),或者将该项目添加到现有仓位(d[x]+=1
)
在Python中,我们实际上有一些快捷方式:
from collections import defaultdict
def histogram(L):
d = defaultdict(int)
for x in L:
d[x] += 1
return d
这会自动将d
中的每个箱子从零开始(int()
返回的内容),因此您无需检查箱子是否存在。在Python 2.7或更高版本上:
from collections import Counter
d = Counter(L)
将自动映射L
中每个项目的频率。不需要其他代码。请记住,如果在for
循环中,则
因此,当您查看L
中的第一个项目时,d
中没有任何内容,但是当您进入L
中的下一个项目时,在d
中有一些内容,因此您需要检查是否在直方图上创建一个新的仓位(d[x]=1
),或者将该项目添加到现有仓位(d[x]+=1
)
在Python中,我们实际上有一些快捷方式:
from collections import defaultdict
def histogram(L):
d = defaultdict(int)
for x in L:
d[x] += 1
return d
这会自动将d
中的每个箱子从零开始(int()
返回的内容),因此您无需检查箱子是否存在。在Python 2.7或更高版本上:
from collections import Counter
d = Counter(L)
将自动映射L
中每个项目的频率。不需要其他代码。对于L
中的每个元素,将对x
中的循环中的代码执行一次,其中x
是当前元素的值
让我们来看一个简单的例子,其中L
是列表[3,3]
。第一次通过循环的d
将为空,x
将为3,d
中的3将为假,因此d[3]
将设置为1。通过循环的下一次x
将再次为3,并且d
中的3将为真,因此d[3]
将增加1。for
循环中的代码将针对L
中的每个元素执行一次,其中x
是当前元素的值
让我们来看一个简单的例子,其中L
是列表[3,3]
。第一次通过循环的d
将为空,x
将为3,d
中的3将为假,因此d[3]
将设置为1。循环的下一次x
将再次为3,d中的3
将为真,因此d[3]
将增加1。我想其他人已经解释了为什么如果d中的x
。但这里有一条线索,这段代码应该如何写在“不要请求许可,请求原谅”下面:
原因是,您希望此错误只出现一次(每个方法调用至少出现一次)。因此,没有必要检查d中的x是否。但这里有一条线索,这段代码应该如何写在“不要请求许可,请求原谅”下面:
原因是,您希望此错误只出现一次(每个方法调用至少出现一次)。因此,无需检查是否可以使用例如matplotlib
在Python中创建自己的直方图。如果您想了解如何实现这一点的示例,可以参考
在此特定情况下,您可以使用doing:
temperature = [4, 3, 1, 4, 6, 7, 8, 3, 1]
radius = [0, 2, 3, 4, 0, 1, 2, 10, 7]
density = [1, 10, 2, 24, 7, 10, 21, 102, 203]
points, sub = hist3d_bubble(temperature, density, radius, bins=4)
sub.axes.set_xlabel('temperature')
sub.axes.set_ylabel('density')
sub.axes.set_zlabel('radius')
您可以使用Python创建自己的直方图,例如matplotlib
。如果您想了解如何实现这一点的示例,可以参考
在此特定情况下,您可以使用doing:
temperature = [4, 3, 1, 4, 6, 7, 8, 3, 1]
radius = [0, 2, 3, 4, 0, 1, 2, 10, 7]
density = [1, 10, 2, 24, 7, 10, 21, 102, 203]
points, sub = hist3d_bubble(temperature, density, radius, bins=4)
sub.axes.set_xlabel('temperature')
sub.axes.set_ylabel('density')
sub.axes.set_zlabel('radius')
您可以创建具有dict理解的直方图:
histogram = {key: l.count(key) for key in set(L)}
您可以创建具有dict理解的直方图:
histogram = {key: l.count(key) for key in set(L)}
可以使用Python 2.7和Python 3.1+中提供的
>>> # init empty counter
>>> from collections import Counter
>>> c = Counter()
>>> # add a single sample to the histogram
>>> c.update([4])
>>> # add several samples at once
>>> c.update([4, 2, 2, 5])
>>> # print content
>>> print c
Counter({2: 2, 4: 2, 5: 1})
该模块提供了几个不错的功能,比如计数器上的加法、减法、求交和并集。计数器
可以计算可用作字典键的任何内容。可以使用Python 2.7和Python 3.1+提供的
>>> # init empty counter
>>> from collections import Counter
>>> c = Counter()
>>> # add a single sample to the histogram
>>> c.update([4])
>>> # add several samples at once
>>> c.update([4, 2, 2, 5])
>>> # print content
>>> print c
Counter({2: 2, 4: 2, 5: 1})
该模块提供了几个不错的功能,比如计数器上的加法、减法、求交和并集。计数器
可以计算任何可用作字典键的东西。除了
之外,它比if
慢得多,但是try
更快——因此,如果如果x不在d中
发生得相当频繁,最好征得许可。当键错误
确实是例外情况时,那么你应该使用尝试
/例外
并请求原谅。例外
比如果
慢得多,但是尝试
更快——因此如果如果x不在d中
会相当频繁地发生,最好请求允许。当键错误
确实是例外情况时,您应该使用尝试
/例外
并请求原谅。如果您查找直方图,则使用直方图函数f