在Python中使用numpyscipy进行binning的矢量化方法

在Python中使用numpyscipy进行binning的矢量化方法,第1张

概述我正在使用np.digitize将Python中的2d数组(x by y)合并到其x值的区间(在“bins”中给出):elements_to_bins = digitize(vals, bins) 其中“vals”是一个二维数组,即: vals = array([[1, v1], [2, v2], ...]). elements_to_bins只是说每个元

我正在使用np.digitize将Python中的2d数组(x by y)合并到其x值的区间(在“bins”中给出):

elements_to_bins = digitize(vals,bins)

其中“vals”是一个二维数组,即:

 vals = array([[1,v1],[2,v2],...]). 

elements_to_bins只是说每个元素落入哪个bin.我当时想要做的是得到一个列表,其长度是“箱子”中的箱数,每个元素返回落入该箱的“val”的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)

有没有更优雅/更简单的方法来做到这一点?我只需要列出每个bin中的y值列表.

谢谢.

最佳答案如果我理解你的问题:

vals = array([[1,10],[1,11],20],21],22]])  # Example(x,y) = vals.T  # Shortcutbin_limits = range(min(x)+1,max(x)+2)  # Other limits Could be chosenpoints_by_bin = [ [] for _ in bin_limits ]  # Final resultfor (bin_num,y_value) in zip(searchsorted(bin_limits,x,"right"),y):  # digitize() finds the correct bin number    points_by_bin[bin_num].append(y_value)print points_by_bin  # [[10,[20,21,22]]

Numpy的快速数组 *** 作searchsorted()用于最大效率.然后逐个添加值(因为最终结果不是矩形数组,Numpy对此无能为力).此解决方案应该比循环中的多个where()调用更快,这会迫使Numpy多次重新读取同一个数组. 总结

以上是内存溢出为你收集整理的在Python中使用numpy / scipy进行binning的矢量化方法全部内容,希望文章能够帮你解决在Python中使用numpy / scipy进行binning的矢量化方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1205863.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存