在一个大的 numpy 数组中平均每几行

Average every several rows in a big numpy array

假设我有一个形状为 (100000000, 4) 的数组。 我想每 25 行计算 mean(axis=0) 以获得形状为 (4000000, 4) 的新数组。

为了更清楚,下面是一个简单的例子: 显示一个 4 x 4 数组 H。我想每 2 行计算 mean(axis=0) 以获得形状为 (2, 4) 的新数组 J

H = [[1,1,1,1],
     [2,2,2,2],
     [3,3,3,3],
     [4,4,4,4]]

J = [[1.5, 1.5, 1.5, 1.5],
     [3.5, 3.5, 3.5, 3.5]]

我想知道是否有一种不使用 for 循环的有效方法。

假设第一个维度可以(完全)被 m 整除。那么你可以这样做:

J = H.reshape((H.shape[0] // m, m, H.shape[1])).mean(axis=1)

或者,更简单,让 numpy 计算出第一个维度的大小:

J = H.reshape((-1, m, H.shape[1])).mean(axis=1)

对于你的具体例子m=2

In [3]: m = 2
   ...: J = H.reshape((H.shape[0]//m, m, H.shape[1])).mean(axis=1)
   ...: print(J)
[[1.5 1.5 1.5 1.5]
 [3.5 3.5 3.5 3.5]]