gpt4 book ai didi

python - Scipy:在循环中逐个事件地填充从数据库读取的直方图

转载 作者:行者123 更新时间:2023-11-30 23:39:40 25 4
gpt4 key购买 nike

有时您不想在创建一个巨大的列表后填充直方图。。您想要读取数据库并逐个事件填充直方图。例如:

collection = db["my_collection"]
for event in collection.find():
histogram.fill(event['a_number'])

因此,如果集合中有 100 亿个条目,我可以填充分析所需的任何直方图,而无需将所有数据放入内存中。

我已经完成了构建我自己的 fill_histogram 函数,但我认为应该有一些可以使用的东西...HBOOK FORTRAN 库,开发于 20 世纪 80 年代,将“HFILL”作为其最常用的子例程:)

顺便说一句,这里有一个函数可以完成 numpy.histogram 的工作,但我在 numpy 中找不到:

def hfill(histogram, datum, weight=1):
'''
Bin the right bin in a numpy histogram for datum, with weight.
If datum is outside histogram's bins' range, histogram does not change
'''
for idx, b in enumerate(histogram[1]):
if idx > 0:
if (datum < b and datum >= histogram[1][0]) or (datum <= b and idx == len(histogram[1]) - 1):
histogram[0][idx - 1] += int(weight)
break

最佳答案

我通常对常规numpy.histogram使用一个简单的包装器来解决这个问题:

import numpy as np

class Hist1D(object):

def __init__(self, nbins, xlow, xhigh):
self.nbins = nbins
self.xlow = xlow
self.xhigh = xhigh
self.hist, edges = np.histogram([], bins=nbins, range=(xlow, xhigh))
self.bins = (edges[:-1] + edges[1:]) / 2.

def fill(self, arr):
hist, edges = np.histogram(arr, bins=self.nbins, range=(self.xlow, self.xhigh))
self.hist += hist

@property
def data(self):
return self.bins, self.hist

这允许要求的用法:

from matplotlib import pyplot as plt

h = Hist1D(100, 0, 1)
for _ in range(1000):
a = np.random.random((3,))
h.fill(a)
plt.step(*h.data)
plt.show()

编辑:如果有人有类似的基于事件的设置,但对于 2D 数据,我也有 code for that 。由于此处的问题中没有要求,因此我没有将其添加到答案中。

关于python - Scipy:在循环中逐个事件地填充从数据库读取的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com