python - 总结特定(多个)范围的数据
问题描述
我确定有一个很好的方法可以做到这一点,但我在谷歌的正确搜索词上空白,所以我会在这里问。我的问题是这样的:
我有 2 个二维数组,它们都具有相同的维度。一个数组(数组 1)是 (x,y) 点的累积降水量。另一个(数组 2)是相同 (x,y) 网格的地形高度。我想在数组 2 的特定高度之间求和数组 1,并创建一个条形图,其中地形高度箱为 x 轴,总累积降水量为 y 轴。
所以我希望能够声明一个高度列表(比如[0, 100, 200, ..., 1000]
),并为每个 bin 总结该 bin 内发生的所有降水。
我可以想到一些复杂的方法来做到这一点,但我猜可能有一种我没有想到的更简单的方法。我的直觉是遍历我的高度列表,掩盖该范围之外的任何内容,总结剩余的值,将它们添加到新数组中,然后重复。
我想知道是否有一个内置的 numpy 或类似的库可以更有效地做到这一点。
解决方案
您可以np.bincount
与np.digitize
. digitize
根据高度数组height
和 bin 边界创建一个 bin 索引数组bins
。bincount
然后使用 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]
推荐阅读
- java - 如何使组件根据框架大小改变位置和大小?
- angularjs - 在 Windows 中使用 pm2 在服务器上运行 React 构建
- unity3d - Unity 命令行 - 如何在没有 -quit(ing) 的情况下为每个命令访问现有实例
- java - 无法将 '' 下的属性绑定到 com.zaxxer.hikari.HikariDataSource:
- python - 仅从文本文件中获取信件正文、电子邮件
- jenkins - 仅当 cron 触发时才在 Jenkinsfile 中设置 Jenkins 变量
- c++ - 如何使用可变参数模板在 c++11 中生成左关联表达式(又名左折叠)?
- dc.js - 在 dc.js 中隐藏标题行
- python - 用嵌套循环填充二维列表会在python中意外跳过并重复值
- docker - 节点加入但主节点仅在 Kubernetes 集群上显示主节点