Сумма элементов матрицы в блоках

Прочитать действительную А матрицу размером n x n. Для заданного m, такого, что n%m = 0, найти матрицу В размерности n/m х n/m, элементы которой являются суммой элементов матрицы А в блоках размера m x m. Вывести на экран матрицу А и матрицу В. Нужны два варианта: с заполнением матрицы с клавиатуры и с заполнением случайными числами.

Изучены только самые простые вещи на новичковом уровне: арифм. операции, условные операторы, циклы, списки. Библиотеки не изучены вообще, с помощью NumPy делать не вариант.

Я не могу разобраться с индексами и циклами: как сделать так, чтобы с помощью циклов просуммировать элементы в последовательных блоках, и потом обнулять сумму при переходе к следующему блоку. Ну и соответственно нужно записывать все эти значения в новую матрицу, но я даже не могу для начала вывести эти самые значения.

n = int(input("Матрица А. n = "))
m = int(input("Матрица B. m = "))

matrix = []
for i in range(n):
    row = []
    for j in range(n):
        row.append(int(input('m[{0}][{1}]= '.format(i+1,j+1))))
    matrix.append(row)
print()
for i in range(n):
    for j in range(n):
        print(matrix[i][j],end=' ')
    print()
    
s = 0
for i in range(0,n,m):
    for j in range(0,n,m):
        slag_block = matrix[i][j]
        s += slag_block
        slag_block = 0
    print(s)
print(s)

Ответы (2 шт):

Автор решения: MBo

Например, так:

import random
n = 4
m = 2

matrix = [[random.randint(1,10) for x in range(n)] for y in range(n)]

for i in range(n):
    for j in range(n):
        print(matrix[i][j],end=' ')
    print()

s = [[0 for x in range(n//m)] for y in range(n//m)]

for i in range(n):
    for j in range(n):
        s[i // m][j // m] += matrix[i][j]

print(s)

Если же делаете обход по первой матрице с шагом m, то внутри цикла должны быть ещё два с range(m) (здесь второй цикл я заменил на sum по срезу)

r = 0
for i in range(0,n,m):
    c = 0
    for j in range(0,n,m):
        for k in range(m):
            s[r][c] += sum(matrix[i + k][j:j+m])
        c += 1
    r += 1
→ Ссылка
Автор решения: Astro

У меня получилось так реализовать эту задачу "Сумма матриц":

a = []
c = []
n, m = map(int, input().split())
for i in range(n):
    b = []
    for j in range(m):
        b.append(int(input()))
    a.append(b)
for i in range(n):
    d = []
    for j in range(m):
        d.append(int(input()))
    c.append(d)
for i in range(n):
    for j in range(m):
        c[i][j] += a[i][j]
for i in c:
    print(i)
→ Ссылка