基于另一个数组对一个数组进行直方图分析

2024-04-25 22:59:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个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,对于大型数组来说非常耗时。我相信一定有更优雅的方法吗?你知道吗


Tags: 方法innormforlenrange数组angles
1条回答
网友
1楼 · 发布于 2024-04-25 22:59:16

起始数据(此处随机生成):

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

把这条线分成几步:

  • 列表在成对的lowhight边上循环。你知道吗
  • numpy.where用于查找zenith_angles数组中给定bin内的角度索引。你知道吗
  • numpyindexing用于在上一步获得的索引处选择rates值。你知道吗

相关问题 更多 >