首页 > 解决方案 > 总结特定(多个)范围的数据

问题描述

我确定有一个很好的方法可以做到这一点,但我在谷歌的正确搜索词上空白,所以我会在这里问。我的问题是这样的:

我有 2 个二维数组,它们都具有相同的维度。一个数组(数组 1)是 (x,y) 点的累积降水量。另一个(数组 2)是相同 (x,y) 网格的地形高度。我想在数组 2 的特定高度之间求和数组 1,并创建一个条形图,其中地形高度箱为 x 轴,总累积降水量为 y 轴。

所以我希望能够声明一个高度列表(比如[0, 100, 200, ..., 1000]),并为每个 bin 总结该 bin 内发生的所有降水。

我可以想到一些复杂的方法来做到这一点,但我猜可能有一种我没有想到的更简单的方法。我的直觉是遍历我的高度列表,掩盖该范围之外的任何内容,总结剩余的值,将它们添加到新数组中,然后重复。

我想知道是否有一个内置的 numpy 或类似的库可以更有效地做到这一点。

标签: pythonnumpy

解决方案


您可以np.bincountnp.digitize. digitize根据高度数组height和 bin 边界创建一个 bin 索引数组binsbincount然后使用 bin 索引对 array 中的数据求和rain

# set up
rain  = np.random.randint(0,100,(5,5))/10
height = np.random.randint(0,10000,(5,5))/10
bins = [0,250,500,750,10000]

# compute
sums = np.bincount(np.digitize(height.ravel(),bins),rain.ravel(),len(bins)+1)

# result
sums
# array([ 0. , 37. , 35.6, 14.6, 22.4,  0. ])

# check against direct method
[rain[(height>=bins[i]) & (height<bins[i+1])].sum() for i in range(len(bins)-1)]
# [37.0, 35.6, 14.600000000000001, 22.4]

推荐阅读