numpy - 平均直到一个索引值与 Numpy 中另一个数组的值相对应
问题描述
我有一个数组,其中的值应该被平均,直到作为另一个数组中的值给出的那一天。第一个数组以 365 天为第一个轴,第二个数组对应于特定的儒略日期,范围从 0 到 365,从第一个数组的值应取平均值。
array1.shape = (365, 375, 700)
array2.shape = (375, 700)
结果数组自然将具有与用于平均第一个数组的第二个数组相同的形状。是否有捷径可寻?也许有一些 for 循环或矢量化/广播?
提前致谢!
解决方案
您可以使用numpy.cumsum计算累积总和,axis=0
然后取一些指数并除以该指数,得出该指数的平均值。
import numpy as np
def averages(a, b):
return a.cumsum(axis=0)[
b.ravel(),
np.repeat(np.arange(b.shape[0]), b.shape[1]),
np.tile(np.arange(b.shape[1]), b.shape[0]),
].reshape(b.shape) / (b + 1)
a = np.arange(12).reshape(3, 2, 2)
b = np.array([[0, 1], [1, 2]])
print(a)
# [[[ 0 1]
# [ 2 3]]
# [[ 4 5]
# [ 6 7]]
# [[ 8 9]
# [10 11]]]
print(b)
# [[0 1]
# [1 2]]
print(averages(a, b))
# [[0. 3.]
# [4. 7.]]
推荐阅读
- javascript - 从网络摄像头保存图像在本地主机上工作正常,但在服务器上不行
- flutter - 如何从飞镖中的字符串中获取双精度值?
- javascript - 如何在nodejs脚本中等待ioredis库的“设置”功能?(我认为回答者不需要知道ioredis。)
- python - 使用 xlsxwriter 的一系列单元格的单元格格式
- c# - “迁移”到 AndroidX 后由多个托管类型错误生成的 Java 类型
- java - android项目中不同的kotlin版本
- jmespath - JMESPath 将字符串转换为数字,然后过滤大于 0 得到“无效令牌(数字):“0””错误消息
- python - 无法从 powershell 运行行为命令,出现错误“术语'行为'未被识别为 cmdlet 的名称”
- python - 我正在尝试模拟用户登录 Chegg,但遇到访问被拒绝页面
- java - 使用 Mockito.when() 模拟和验证 vs mockito.verify