Я хотел бы выполнить некоторые простые вычисления на блочной матрице (или, в более общем плане, на d-dim nd.array). Что-то вроде этого:Лучший способ получить среднее значение суммы матрицы в numpy?
В картине, заглавные буквы представляют 3 по 3 блока матрицу, и строчные буквы цифры (среднее или сумма блочных матриц).
В настоящее время я только знаю, как сделать это, используя для петли
import numpy as np
test_matrix = np.arange(81).reshape(9,9)
a = np.zeros((3,3))
for i in range(3):
for j in range(3):
a[k,i,j] = test_matrix[3*i:3*(i+1),3*j:3*(j+1)].mean()
print a
Но это становится медленным, если моя матрица становится больше или многомерными, например, следующие:
test_matrix = np.arange(81*2).reshape(2,9,9)
a = np.zeros((2,3,3))
for k in range(2):
for i in range(3):
for j in range(3):
a[k,i,j] = test_matrix[k,3*i:3*(i+1),3*j:3*(j+1)].mean()
print a
Есть ли лучший способ выполнить такие задачи?
Большое спасибо!
Попробуйте изменить форму (3,3,3,3) и взять сумму на 2 оси. – hpaulj