是否有更有效的方法在预先指定的存储箱中获取数组的平均值?例如,我有一个数字数组和一个对应于该数组中箱子开始和结束位置的数组,我只想取这些箱子的平均值?我有下面的代码,但我想知道如何减少和改进它。谢谢
来自scipy导入的
*
从numpy进口*
def get_bin_表示(a、b_开始、b_结束):
ind_上限=非零(a>;=b_开始)[0]
a_upper=a[ind_upper]
a_范围=a_上限[非零(a_上限<;b_端)[0]]
平均值=平均值(a范围)
返回平均值
数据=兰特(100)
存储箱=linspace(0、1、10)
binned_数据=[]
n=0
对于范围内的n(0,len(料仓)-1):
b_开始=料仓[n]
b_端=箱[n+1]
binned_data.append(获取_bin_平均值(数据、b_开始、b_结束))
打印装箱单数据
使用numpy.digitize()可能更快、更容易:
导入numpy
数据=numpy.random.random(100)
bin=numpy.linspace(0,1,10)
数字化=numpy.数字化(数据、箱子)
bin_means=[data[digitalized==i].means()表示范围(1,len(bin))]
另一种方法是使用numpy.histogram():
bin_平均值=(numpy.直方图(数据、箱子、权重=数据)[0]/
numpy.直方图(数据、箱)[0])
你自己试试哪一个更快…:)