Написать функцию, которая находит сумму четных элементов главной диагонали массива
import numpy as np
def diag_2k(a):
a = []
diag = []
s = 0
for i in a:
diag.append(a[i,i])
for j in range(len(diag)):
if diag[j] % 2 == 0:
s += diag[j]
result = s
return result
что не так?
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
если вы импортируете модуль Numpy, то есть смысл воспользоваться его векторизированными методами.
Пример:
создаем матрицу из случайных чисел:
In [26]: np.random.seed(31415)
In [27]: a = np.random.randint(10, size=(10, 8))
In [28]: a
Out[28]:
array([[7, 3, 5, 8, 2, 6, 6, 3],
[5, 6, 0, 0, 8, 3, 6, 1],
[6, 8, 5, 1, 4, 6, 9, 2],
[7, 2, 2, 3, 3, 9, 8, 3],
[4, 8, 3, 8, 2, 0, 0, 4],
[4, 7, 2, 6, 6, 0, 2, 6],
[6, 1, 9, 1, 4, 2, 2, 8],
[0, 7, 5, 4, 8, 3, 8, 3],
[8, 5, 7, 7, 1, 4, 5, 7],
[6, 4, 4, 6, 4, 2, 5, 5]])
создаём вектор, состоящий из диагональных элементов:
In [29]: diag = np.diagonal(a)
In [30]: diag
Out[30]: array([7, 6, 5, 3, 2, 0, 2, 3])
суммируем четные элементы вектора:
In [31]: res = diag[diag % 2 == 0].sum()
результат:
In [32]: res
Out[32]: 10
Автор решения: nomnoms12
→ Ссылка
"Vanilla" Python:
def f(matrix) -> int:
n = min(len(matrix), len(matrix[0]))
s = 0
for i in range(n):
if (x := matrix[i][i]) % 2 == 0:
s += x
return s
def main():
matrix = [
[3, 1, 1, 1],
[1, 2, 1, 1],
[1, 1, 3, 1],
[1, 1, 1, 4],
[1, 1, 1, 1],
]
print(f(matrix))
if __name__ == '__main__':
main()
stdout:
6