gpt4 book ai didi

python - 基于另一个数组对一个数组进行直方图

转载 作者:行者123 更新时间:2023-12-05 07:19:31 25 4
gpt4 key购买 nike

我有两个 numpy 数组:

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

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

这不是很 pythonic,对于大型数组来说很耗时。我相信一定有更优雅的方式来做到这一点?

最佳答案

起始数据(这里是随机生成的):

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 的 lowhight 边缘。
  • numpy.where用于查找 zenith_angles 数组中给定 bin 内角度的索引。
  • numpy indexing用于选择上一步获得的索引处的rates值。

关于python - 基于另一个数组对一个数组进行直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57745532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com