python 直方图每个bin中的值_python – 如何获取直方图bin中的数据

我想得到包含在直方图bin中的数据的列表.我正在使用numpy和Matplotlib.我知道如何遍历数据并检查bin边缘.但是,我想为2D直方图执行此操作,而这样做的代码是相当难看的. numpy是否有任何结构使之更容易?

对于1D案例,我可以使用searchsorted().但逻辑并没有那么好,我不想在每个数据点上都不需要进行二进制搜索.

大多数讨厌的逻辑是由于bin边界区域.所有地区都有这样的边界:[左边缘,右边缘].除了最后一个bin,它有一个这样的区域:[左边缘,右边缘].

以下是1D案例的一些示例代码:

import numpy as np

data = [0, 0.5, 1.5, 1.5, 1.5, 2.5, 2.5, 2.5, 3]

hist, edges = np.histogram(data, bins=3)

print 'data =', data

print 'histogram =', hist

print 'edges =', edges

getbin = 2 #0, 1, or 2

print '---'

print 'alg 1:'

#for i in range(len(data)):

for d in data:

if d >= edges[getbin]:

if (getbin == len(edges)-2) or d < edges[getbin+1]:

print 'found:', d

#end if

#end if

#end for

print '---'

print 'alg 2:'

for d in data:

val = np.searchsorted(edges, d, side='right')-1

if val == getbin or val == len(edges)-1:

print 'found:', d

#end if

#end for

以下是2D案例的一些示例代码:

import numpy as np

xdata = [0, 1.5, 1.5, 2.5, 2.5, 2.5, \

0.5, 0.5, 0.5, 0.5, 1.5, 1.5, 1.5, 1.5, 1.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, \

0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 3]

ydata = [0, 5,5, 5, 5, 5, \

15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \

25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 30]

xbins = 3

ybins = 3

hist2d, xedges, yedges = np.histogram2d(xdata, ydata, bins=(xbins, ybins))

print 'data2d =', zip(xdata, ydata)

print 'hist2d ='

print hist2d

print 'xedges =', xedges

print 'yedges =', yedges

getbin2d = 5 #0 through 8

print 'find data in bin #', getbin2d

xedge_i = getbin2d % xbins

yedge_i = int(getbin2d / xbins) #IMPORTANT: this is xbins

for x, y in zip(xdata, ydata):

# x and y left edges

if x >= xedges[xedge_i] and y >= yedges[yedge_i]:

#x right edge

if xedge_i == xbins-1 or x < xedges[xedge_i + 1]:

#y right edge

if yedge_i == ybins-1 or y < yedges[yedge_i + 1]:

print 'found:', x, y

#end if

#end if

#end if

#end for

有没有更清洁/更有效的方式来做到这一点?似乎numpy会有这样的东西.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值