我试图用Python编写一个随机程序来复制一个公平的骰子(一个骰子)掷骰,以使这个骰子被掷骰100次。我打算将骰子卷的输出显示为直方图。
我认为直方图具有特定的n形状,但这就是我在下面使用的代码所得到的。
import numpy as np
import matplotlib.pyplot as plt
x = []
for i in range(100):
num1 = random.choice(range(1,7))
x.append(num1)
plt.hist(x, bins=6)
plt.xlabel('dice')
plt.show()
还有,是否有更简单的方法可以在python中绘制直方图,例如年龄为[10,3,5,1],表中的频率为[2,3,4,4]?我必须在这样的列表中键入年龄的全部频率:age = [10,10,3,3,3,5,5,5,5,5,1,1,1,1],然后再写该程序? 请在下面的代码中查看我的意思:
import numpy as np
import matplotlib.pyplot as plt
plt.close()
ages = [88,88,88,88,76,76,76, 65,65,65,65,65,96,96,52,52,52,52,52,98,98,102,102,102,102]
#the frequency was = [4, 3, 5, 2, 5, 2, 4] which corresponded to the ages [88,76,65,96,52,98,102]
num_bins = 25
n, bins, patches = plt.hist(ages, num_bins, facecolor='blue')
plt.xlabel('age')
plt.ylabel('Frequency of occurence')
plt.show()
#my histogram again looks more like a bar chart. Is this because I used bins as the ages?
到目前为止,对我来说,绘制带有随机数的直方图比较容易,但对于我来说却不是一张表格。这是我的第二个奇怪的输出:mysecondweirdhistogram
答案 0 :(得分:0)
>>> ages = [10,3,5,1]
>>> freqs = [2,3,4,4]
使用zip将每个年龄与其频率配对;然后使用频率将其中的数量添加到新容器中。
>>> q = []
>>> for a, f in zip(ages, freqs):
... q.extend(a for _ in range(f))
>>> q
[10, 10, 3, 3, 3, 5, 5, 5, 5, 1, 1, 1, 1]
>>>
a for _ in range(f)
是一个生成器表达式,在迭代时将生成f
a
。 extend
方法使用(迭代)生成器表达式。
我们通常将_
用于我们将不使用的值。