我有两个numpy数组:
rates = [1.1, 0.8...]
zenith_anlges = [45, 20, ....]
rates
和zen_angles
的长度相同。
我还有一些预定义的zenith_angle bins
,
zen_bins = [0, 10, 20,...]
我需要做的是根据其相应的天顶角仓对rates
进仓。
一个丑陋的方法是
nbin = len(zen_bins)-1
norm_binned_zen = [[0]]*nbin
for i in range(nbin):
norm_binned_zen[i] = [0]
for i in range(len(rates)):
ind = np.searchsorted(zen_bins,zen_angles[i]) #The corresponding bin number
norm_binned_zen[ind-1].append(rates[i])
这不是Python语言,对于大型数组很费时间。我相信必须有一些更优雅的方法吗?
答案 0 :(得分:0)
起始数据(此处随机生成):
import numpy as np
rates = np.random.random(100)
zenith_angles = np.random.random(100)*90.0
zen_bins = np.linspace(0, 90, 10)
由于您使用的是numpy
,因此可以使用单行解决方案:
norm_binned_zen = [rates[np.where((zenith_angles > low) & (zenith_angles <= high))] for low, high in zip(zen_bins[:-1], zen_bins[1:])]
将此行分为几步:
low
和hight
边上成对循环。zenith_angles
数组中查找给定bin内的角度索引。rates
值。