在一个大的 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]]
假设我有一个形状为 (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]]