在Python中对函数值进行分箱(numpy)
让我来讲讲我的问题:
我用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)