Интереса ради я попробовал применить нестандартных подход, и воспользоваться библиотекой символьных вычислений sympy,а именно его геометрическими объектами. Но получилось не совсем то что надо. Суть подхода по размерам матрицы сделать квадрат (тот что заштрихованный) и смотреть будут ли индексы матрицы попадать в его плоскость. Судя по выводимой псевдографике получается не совсем то. Но сам подходи мне показался любопытным поэтому код выкладываю.
from __future__ import division
from sympy import Point, Polygon
import numpy as np
a = np.ones((5, 5))
square = Polygon(Point(a.shape[0]/2, 0),
Point(a.shape[0], a.shape[1]/2),
Point(a.shape[0]/2, a.shape[1]),
Point(0, a.shape[1]/2))
summa = 0
r = []
for row_index,row in enumerate(a):
for col_index, value in enumerate(row):
if square.encloses_point(Point(row_index, col_index)):
summa += value
r.append('#')
print('Element {:3d} x {:3d} with value {} is in square'.format(row_index, col_index, value))
else:
print('Element {:3d} x {:3d} with value {} dropped'.format(row_index, col_index, value))
r.append('=')
r.append('\n')
print('Result = {}'.format(summa))
print(''.join(r))
=====
==##=
=####
=####
==##=