在Python中对函数值进行分箱(numpy)

2 投票
1 回答
2846 浏览
提问于 2025-04-18 06:12

让我来讲讲我的问题:

我用Python和Numpy写了一段软件,它生成了两个叫做X和Y的numpy数组。

这些值之间有个关系,可以用一个函数表示:Y = f(X)

X的值在[0;1]这个区间内。

numpy.histogram可以把X的值分到这个区间内预先定义好的、间隔相等的几个小区间里。

我想做的是,不用“for”循环,就能把每个小区间对应的Y值加起来。

非常感谢大家的回答。

1 个回答

2

假设你的y值和对应的位置是匹配的,也就是说,y[i] = f(x[i])。这样的话,你可以使用numpy.digitize这个工具来找出x值属于哪个区间,然后用这些区间的索引来把对应的y值加起来。

numpy的例子来看(可以忽略那些值不在[0; 1]范围内的情况):

>>> x = np.array([0.2, 6.4, 3.0, 1.6])
>>> bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])
>>> inds = np.digitize(x, bins)
>>> inds
array([1, 4, 3, 2])

然后把y中的值加起来:

>>> aggregate = [y[inds == i].sum() for i in np.unique(inds)]

如果你在自己创建区间时遇到困难,可以看看numpy.linspace

numpy.linspace(0, 1, num=50, endpoint=True)

撰写回答