在 python 中整合直方图?
Integrate histogram in python?
matplotlib中有没有一个简单的命令让我在一定范围内对直方图进行积分?如果我绘制直方图:
图 = plt.hist(x, bins)
那么,有没有像fig.integral(bin1, bin2)这样的命令呢?那将return从bin1到bin2的直方图的积分?
首先,请记住积分只是曲线下方的总面积。在直方图的情况下,积分(伪python)是sum([bin_width[i] * bin_height[i] for i in bin_indexes_to_integrate])
。
作为参考,请参阅在 matplotlib 中使用直方图的示例:http://matplotlib.org/1.2.1/examples/pylab_examples/histogram_demo.html。
这里他们将 plt.histogram
的输出分成三部分,n
、bins
和 patches
。我们可以使用这种分离来实现您这样请求的 "integral"。
假设 bin1
和 bin2
是您要积分的 bin 的索引,然后像这样计算积分:
# create some dummy data to make a histogram of
import numpy as np
x = np.random.randn(1000)
nbins = 10
# use _ to assign the patches to a dummy variable since we don't need them
n, bins, _ = plt.hist(x, nbins)
# get the width of each bin
bin_width = bins[1] - bins[0]
# sum over number in each bin and mult by bin width, which can be factored out
integral = bin_width * sum(n[bin1:bin2])
如果您已将 bins
定义为具有多个宽度的列表,则必须执行类似于 @cphlewis 所说的操作(这有效,没有一个):
integral = sum(np.diff(bins[bin1:bin2])*n[bin1:bin2])
也值得一看
plt.hist
命令returns所有你需要的数据制作一个。如果 out = plt.hist(...)
,bin 高度为 out[0]
,bin 宽度为 diff(out[1])
。例如,
sum(out[0][4:7]*diff(out[1][4:8]))
对于 bins 4-6(含)的积分。 diff
计算每个 bin 宽度,因此它处理不同宽度的 bin,并且乘法发生在元素方面,因此计算直方图中每个矩形的面积。
matplotlib中有没有一个简单的命令让我在一定范围内对直方图进行积分?如果我绘制直方图: 图 = plt.hist(x, bins) 那么,有没有像fig.integral(bin1, bin2)这样的命令呢?那将return从bin1到bin2的直方图的积分?
首先,请记住积分只是曲线下方的总面积。在直方图的情况下,积分(伪python)是sum([bin_width[i] * bin_height[i] for i in bin_indexes_to_integrate])
。
作为参考,请参阅在 matplotlib 中使用直方图的示例:http://matplotlib.org/1.2.1/examples/pylab_examples/histogram_demo.html。
这里他们将 plt.histogram
的输出分成三部分,n
、bins
和 patches
。我们可以使用这种分离来实现您这样请求的 "integral"。
假设 bin1
和 bin2
是您要积分的 bin 的索引,然后像这样计算积分:
# create some dummy data to make a histogram of
import numpy as np
x = np.random.randn(1000)
nbins = 10
# use _ to assign the patches to a dummy variable since we don't need them
n, bins, _ = plt.hist(x, nbins)
# get the width of each bin
bin_width = bins[1] - bins[0]
# sum over number in each bin and mult by bin width, which can be factored out
integral = bin_width * sum(n[bin1:bin2])
如果您已将 bins
定义为具有多个宽度的列表,则必须执行类似于 @cphlewis 所说的操作(这有效,没有一个):
integral = sum(np.diff(bins[bin1:bin2])*n[bin1:bin2])
也值得一看
plt.hist
命令returns所有你需要的数据制作一个。如果 out = plt.hist(...)
,bin 高度为 out[0]
,bin 宽度为 diff(out[1])
。例如,
sum(out[0][4:7]*diff(out[1][4:8]))
对于 bins 4-6(含)的积分。 diff
计算每个 bin 宽度,因此它处理不同宽度的 bin,并且乘法发生在元素方面,因此计算直方图中每个矩形的面积。