基于另一个数组,为一个数组制作直方图。

3

我有两个numpy数组:

rates = [1.1, 0.8...]
zenith_anlges = [45, 20, ....]

rateszen_angles的长度相同。

我还有一些预定义的天顶角分组

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])

这种方式不太符合Pythonic风格,并且处理大型数组时耗费时间较长。我相信一定还有更加优雅的解决方法吧?

1个回答

1
起始数据(这里是随机生成的):
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:])]

将这行分解成几个步骤:

  • 列表推导式循环遍历每个bin的lowhigh边缘。
  • numpy.where 用于查找在给定bin内的角度在zenith_angles数组中的索引。
  • 使用numpy indexing 来选择在前一步获得的索引处的rates值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接