可以使用列表理解和索引切片来完成此操作:
import numpy as np
arr = np.arange(1,31).reshape((3,10))
pixel_size = np.array([2,3,1])
middle_ind = int(arr.shape[1]/2.)
print middle_ind
sub_arr = [arr[i,middle_ind - pixel_size[i]:middle_ind + pixel_size[i]] for i in range(len(pixel_size))]
print('sub_arr: ', sub_arr)
output = [np.mean(item) for item in sub_arr]
print('output: ', output)
> sub_arr: [array([4, 5, 6, 7]), array([13, 14, 15, 16, 17, 18]), array([25, 26])]
> output: [5.5, 15.5, 25.5]
你的子矩阵是一个列表而不是一个数组,所以它更难向量化操作。您可能想重新构造代码以利用矩阵运算。