我已经成功地根据list x
创建了直方图。
hist的计数应乘以系数0.0667。
如果我使用plt.hist
的权重函数,则会出现错误。
这是我已经尝试过的!
counts= plt.hist(x,bins=[0,0.01,0.02], weights=(x*0.06666), facecolor='grey')
我猜这是一个非常简单的问题,但是我是python的新手!
答案 0 :(得分:1)
在Python中,您不能将一个列表与一个因子相乘(除非您使用numpy
数组,否则无论如何在这种情况下都是最好的主意)。
尝试
x_weights = [i*0.06666 for i in x]
counts = plt.hist(x,bins=[0,0.01,0.02], weights=x_weights, facecolor='grey')
或
import numpy as np
counts= plt.hist(x,bins=[0,0.01,0.02], weights=np.asarray(x)*0.06666, facecolor='grey')
此外,您的体重看起来也很圆。您应该考虑将加权因子保存到局部变量,然后在绘制直方图时使用
编辑:现在,我(希望)知道了真正的问题,这是如何处理数据的方法:
Numpy数组可以而且应该是多维的。如果您对332个输出进行15次仿真,那么自然应该会得到一个2D形状的数组(15L,332L),这意味着您将获得一个包含15行和332列的矩阵。
准备您的numpy数组:
x = np.zeros(shape=(15,332)) # this creates a 2D-matrix full of "0"
将每个模拟的输出写入相应的行:
for i_run in range(15):
x[i_run,:] = # result of the simulation # i_run
计算15次模拟运行的332个值的平均值:
x_mean = np.mean(x, axis=0)
axis=0
告诉python计算列的平均值。 axis=1
将返回您的行的平均值。
现在,您可以简单地绘制这些平均值的直方图:
counts = plt.hist(x_mean,bins=[0,0.01,0.02], facecolor='grey')
仍然让我感到困惑的是,您所说的“计数”。对我来说,“数”是一个整数。我只能计算“ 0、1、2、3、4,...”,而不是“ 0、0、0、0.11、0.11、0.15,...”
答案 1 :(得分:0)
x = [liste_FED_all]
zz = [0.066666667]*4980
counts= plt.hist(x, bins=[0,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.2,0.3,1], weights= zz, facecolor='grey',edgecolor='black')
权重函数是正确的,我必须为数组x的每个数字设置权重。因此,我创建了数组zz,它为数组x的每个数字提供了4980倍的因子!很简单,我花了10个小时!我还有很多东西要学! :)