В среднем каждые несколько строк в большом массиве numpy - PullRequest
1 голос
/ 07 февраля 2020

Допустим, у меня есть массив с формой (100000000, 4). Я хотел бы вычислить mean(axis=0) каждые 25 строк, чтобы получить новый массив с формой (4000000, 4).

Для большей ясности приведем простой пример: показан массив 4 на 4 H. Я хотел бы вычислить mean(axis=0) каждые 2 строки, чтобы получить новый массив J с формой (2, 4).

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]]

Мне было интересно, есть ли эффективный способ сделать это без использования для l oop.

1 Ответ

3 голосов
/ 07 февраля 2020

Предположим, что первое измерение (точно) делится на 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)

Для вашего конкретного c примера 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]]
...