我用Python将一个2d数组(x乘y)放入x值的容器中(在“bins”中给出),使用数字化公司名称:
elements_to_bins = digitize(vals, bins)
其中“VAL”是一个二维数组,即:
^{pr2}$elements\u-to-u-bins只说明每个元素属于哪个bin。然后我要做的是得到一个列表,其长度为“bins”中的bin数,每个元素返回落入该bin中的“vals”的y维。我现在这样做:
points_by_bins = []
for curr_bin in range(min(elements_to_bins), max(elements_to_bins) + 1):
curr_indx = where(elements_to_bins == curr_bin)[0]
curr_bin_vals = vals[:, curr_indx]
points_by_bins.append(curr_bin_vals)
有没有更优雅/更简单的方法?我只需要一个列在每个箱子里的y值的列表。在
谢谢。在
如果我没弄错你的问题:
Numpy的快速数组操作
searchsorted()
用于实现最大效率。然后一个接一个地添加值(因为最终结果不是一个矩形数组,Numpy对此帮助不大)。这个解决方案应该比一个循环中的多个where()
调用更快,这会迫使Numpy多次重新读取相同的数组。在这将返回一个类似于IDL HISTOGRAM的Reverse_index的数据结构:
那么属于bin#i的元素列表是
^{pr2}$(我的快速计时测试表明,这比EOL的算法快5倍,因为它不需要创建不同大小的列表)
bin键是否只是整数,没有binning,就像你的例子中那样?那么你就可以这样做了,不需要纽比:
相关问题 更多 >
编程相关推荐