Сумма элементов матрицы в блоках
Прочитать действительную А матрицу размером 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 шт):
Например, так:
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
У меня получилось так реализовать эту задачу "Сумма матриц":
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)