程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

列表中的哪些元素进入了直方图箱?

发布于2020-01-16 22:23     阅读(1116)     评论(0)     点赞(20)     收藏(5)


我正在尝试根据直方图绘制比例散点图。散点图非常简单明了,制作直方图,找到bin中心,散点图。

nbins=7
# Some example data
A = np.random.randint(0, 10, 100) 
B = np.random.rand(100)

counts, binEdges=np.histogram(A,bins=nbins)
bincenters = 0.5*(binEdges[1:]+binEdges[:-1])

fig = plt.figure(figsize=(7,5))
ax = fig.add_subplot(111)
ax.scatter(bincenters,counts,c='k', marker='.')
ax_setup(ax, 'X', 'Y')
plt.show()

但我希望的每个元素A只向其bin贡献一个比例值,该比例值存储在中B(即,不是让每个bin都是该bin中元素的数量A,我希望每个bin都是中来自的相应值的总和B

为此,我尝试创建一个列表C(长度与A相同B),该列表具有的每个元素的仓位编号分配A,然后将来自B该仓位的所有值加到同一仓位中。我以为numpy.searchsorted()是我所需要的,例如,

C = bincenters.searchsorted(A, 'right')

但这不能正确分配,并且似乎没有返回正确数量的垃圾箱。

因此,如何创建一个列表,告诉我数据中每个元素进入哪个直方图bin?


解决方案


你写

但是我希望A的每个元素只为其比例尺贡献一个比例值,该比例值存储在B中。(即,不是每个bin都是A中该bin元素的数量,我希望每个bin都是总和来自B的对应值)

IIUC,此功能已numpy.histogram通过weights参数支持

一组与a形状相同的砝码。每个中的每个值仅将其关联权重分配给仓位计数(而不是1)。如果normed为True,则会对权重进行归一化,以使该范围内的密度积分保持为1。

因此,对于您的情况,

counts, binEdges=np.histogram(A, bins=nbins, weights=B)

另一点:如果您打算绘制直方图,请注意,您可以matplotlib.pyplot为此直接使用的效用函数(也需要这样做weights):

from matplotlib import pyplot as plt
plt.hist(A, bins=nbins, weights=B);

在此处输入图片说明


最后,如果您打算将分配分配到垃圾箱,那么它就是这样numpy.digitize做的:

nbins=7
# Some example data
A = np.random.randint(0, 10, 10) 
B = np.random.rand(10)

counts, binEdges=np.histogram(A,bins=nbins)
>>> binEdges, np.digitize(A, binEdges)
array([ 0.        ,  1.28571429,  2.57142857,  3.85714286,  5.14285714,
    6.42857143,  7.71428571,  9.        ])


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/226463/2a6fe2b8ac828bca8033/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

20 0
收藏该文
已收藏

评论内容:(最多支持255个字符)