首页 > 解决方案 > 平均直到一个索引值与 Numpy 中另一个数组的值相对应

问题描述

我有一个数组,其中的值应该被平均,直到作为另一个数组中的值给出的那一天。第一个数组以 365 天为第一个轴,第二个数组对应于特定的儒略日期,范围从 0 到 365,从第一个数组的值应取平均值。

array1.shape = (365, 375, 700)
array2.shape = (375, 700)

结果数组自然将具有与用于平均第一个数组的第二个数组相同的形状。是否有捷径可寻?也许有一些 for 循环或矢量化/广播?

提前致谢!

标签: numpymultidimensional-arrayvectorizationarray-broadcastingnumpy-slicing

解决方案


您可以使用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.]]

推荐阅读