Сумма элементов над главной диагональю питон

Как найти сумму элементов выше и ниже диагонали матрицы в питоне?

Вы можете использовать np.triu , np.tril и np.trace для вычисления этих сумм (ваш вопрос не указывает, разрешено ли вам использовать numpy или нет):

import numpy as np

np.random.seed(0)
A = np.random.randint(0,10,size=(5,5))

[[5 0 3 3 7] 
[9 3 5 2 4]
[7 6 8 8 1]
[6 7 7 8 1]
[5 9 8 9 4]]
upper_sum = np.triu(A).sum()-np.trace(A)
lower_sum = np.tril(A).sum()-np.trace(A)

Вот быстрый метод, использующий scipy.spatial.distance.squareform для треугольников и np.einsum для диагонали:

>>> import numpy as np
>>> from scipy.spatial.distance import squareform
>>>
>>> x = np.arange(36).reshape(6, 6)
>>>
>>> sum_ut = squareform(x, checks=False).sum()
>>> sum_dg = np.einsum('ii', x)
>>> sum_lt = squareform(x.T, checks=False).sum()
>>> timeit(lambda: squareform(x, checks=False).sum())
6.272806407185271
>>> timeit(lambda: np.einsum('ii', x))
1.3961836302187294
>>> timeit(lambda: squareform(x.T, checks=False).sum())
6.6827554509509355
>>> timeit(lambda: np.triu(x, 1).sum())
13.85556498519145
>>> timeit(lambda: np.trace(x))
3.081781509099528
>>> timeit(lambda: np.tril(x, -1).sum())
13.659938262077048

Вы можете сделать это с помощью numpy.triu_indices . Ниже я прокомментировал каждый шаг, чтобы провести вас через него. В основном вы получаете верхние правые индексы с помощью numpy.triu_indices и перебираете их, чтобы получить элементы. Вы суммируете все элементы, кроме тех, которые расположены по диагонали.

import numpy as np

m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
triu = np.triu_indices(m.ndim+1) # Get upper right indices of m
triu_idx = list(zip(triu[0],triu[1])) # List of tuples for the upper right indices
cum_sum = 0 # Initialize sum
for x in triu_idx: # Loop over the upper right indices
if x[0] != x[1]: # Exclude diagonal elements
cum_sum += m[x] # Add to sum

print(cum_sum) # Output 11

[[a11, a12, a13], 
[a21, a22, a23],
[a31, a32, a33]]

Находите ли вы сходство в показателях верхней треугольной и нижней треугольной частей? (Наведите указатель мыши на текстовую часть ниже, чтобы узнать ответ).

Первый индекс верхнего треугольника имеет более низкое значение по сравнению со вторым индексом. Аналогично, первый индекс меньше, чем второй индекс в нижнем треугольнике. Более того, для диагональных элементов индексы одинаковы!

Теперь, предполагая, что вы написали вышеупомянутый код самостоятельно, я надеюсь, что вы можете сделать это самостоятельно, так как теперь вы знаете логику. Это будет два цикла (один для обхода строк и один для обхода столбцов) и несколько операторов if.

for i in range(0, N): 
sum += A[i][i]
for i in range(0, N): 
for j in range(i+1, N):
sum2 += A[i][j]

Итак, хитрости таковы: вычисление суммы для каждого я и j, с j > i . Применение тех же трюков для элементов ниже диагонали вычисляет сумму для каждого я и j, с j < i .

for i in range(0, N): 
for j in range(0, i):
sum3 += A[i][j]
matrix = [[i+j for j in range(4)] for i in range(4)] 

for row in matrix:
print(" ".join(list(map(str,row))))

totalSum = 0
for i in range(1,len(matrix)):
for j in range(i):
totalSum += matrix[i][j]
print("Below sum: ", totalSum)

totalSum = 0
for i in range(len(matrix)):
for j in range(i+1,len(matrix)):
totalSum += matrix[i][j]
print("Above sum: ", totalSum)

0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
Below sum: 18
Above sum: 18
totalSum = sum([matrix[i][j] for i in range(1,len(matrix)) for j in range(i)])
totalSum = sum([matrix[i][j] for i in range(len(matrix)) for j in range(i+1,len(matrix))])

Если вы хотите сложить все числа выше и ниже главной диагонали, вы можете выполнить проверку индекса:

totalSum = 0
for i in range(len(matrix)):
for j in range(len(matrix)):
if not i==j:
totalSum += matrix[i][j]
print("Sum: ", totalSum)

Еще один способ найти эту сумму (хотя и не рекомендуется) — найти общую сумму матрицы и сумму главной диагонали, а затем выполнить вычитание, чтобы найти окончательную сумму:

matrix = [[i+j for j in range(4)] for i in range(4)] 

for row in matrix:
print(" ".join(list(map(str,row))))

matrixSum = sum([sum(elem for elem in row) for row in matrix])
diagonalSum = sum([matrix[i][i] for i in range(len(matrix))])
finalSum = matrixSum - diagonalSum

print("Matrix sum: ", matrixSum)
print("Diagonal sum: ", diagonalSum)
print("Final sum: ", finalSum)

0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6

Matrix sum: 48
Diagonal sum: 12
Final sum: 36

Примечание. Следите за синтаксисом операторов print когда вы используете Python 2, а мой ответ — в Python 3.

Источник

Сумма и число положительных элементов матрицы над диагональю

Сумма положительных элементов над главной диагональю матрицы
Посчитать и вывести сумму положительных элементов, расположенных над главной диагональю матрицы.

Вычислить сумму и число положительных элементов матрицы над главной диагональю
Составить блок-схему и программу для решения задачи. Вывести результаты счета и исходную матрицу.

Вычислить сумму и число положительных элементов матрицы, находящихся над главной диагональю
Вычислить сумму и число положительных элементов матрицы А(N N), находящихся над главной.

Вычислить сумму и число положительных элементов матрицы, находящихся над главной диагональю
Вычислить сумму и число положительных элементов матрицы, находящихся над главной диагональю.имя.

Вычислить сумму и число положительных элементов матрицы A(n,m), находящихся над главной диагональю
Вычислить сумму и число положительных элементов матрицы A(n,m), находящихся над главной диагональю

Эксперт NIX

matrix = [[],] # заполнить соответствующими значениями sum_pos = 0 count_pos = 0 for i in range(len(matrix) - 1): for j in range(i + 1, len(matrix[i])): if matrix[i][j] > 0: sum_pos += matrix[i][j] count_pos += 1 print('Сумма положительных элементов —', sum_pos, '\nколичество таких элементов —', count_pos)
matrix = [[],] # заполнить соответствующими значениями result = [matrix[i][j] for i in range(len(matrix)-1) for j in range(i+1, len(matrix[i])) if matrix[i][j] > 0] print('Сумма положительных элементов —', sum(result), '\nколичество таких элементов —', len(result))

Источник

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » сумма чисел главной диагонали матрицы

#1 Июнь 1, 2022 10:33:44

сумма чисел главной диагонали матрицы

Привет, помогите решить задачу.
Нужно найти сумму чисел главной диагонали матрицы, код я написал, в Pycharm все работает как положено, все считает, но при попытке сдать задачу (онлайн курс, там автоматическая система проверки), выдает ошибку в этой строке

ошибка такого вида ValueError: invalid literal for int() with base 10: ‘1 2 3’
не пойму как исправить, я понимаю что тип входных данных не соответствует, уже все перепробовал никак не могу разобраться.
вот код:

# задаем размерность, пустой список и счетчик для матрицы rows = int(input()) matrix = [] count = 0 # создаем вложенный список для будущей матрицы заполненный нулями for _ in range(rows): matrix.append([0] * rows) # заполняем матрицу произвольными значениями и сразу вычисляем сумму чисел главной диагонали for i in range(rows): for j in range(rows): matrix[i][j] = int(input()) if (i == j): # это индексы элементов, а не значения count += matrix[i][j] # а здесь уже значения соответствующие этим индексам # выводим матрицу на экран for r in range(rows): for c in range(rows): print(str(matrix[r][c]).rjust(3), end=' ') print() # принтуем сумму чисел главной диагонали print(count) 

Отредактировано anotcher (Июнь 1, 2022 11:51:14)

Источник

Помогите с заданиями на Python .

Вариант 1.
1. Вычислить сумму и число положительных элементов матрицы A[N, N], находящихся над главной диагональю.
2. Дана матрица B[N, М]. Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их с первым и последним элементами строки соответственно.
Вариант 2.
1. Дана целая квадратная матрица n-го порядка. Определить, является ли она магическим квадратом, т. е. такой матрицей, в которой суммы элементов во всех строках и столбцах одинаковы.
2. Дана прямоугольная матрица A[N, N]. Переставить первый и последний столбцы местами и вывести на экран.
Вариант 3.
1. Определить, является ли заданная целая квадратная матрица n-го порядка симметричной (относительно главной диагонали).
2. Дана вещественная матрица размером n х m. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в верхнем левом углу.

c = 0
s = 0
for i in range(N):
____for j in range(i + 1, N):
________if A[i][j] > 0:
____________s += A[i][j]____________c += 1

for i in range(N):
____i_min = 0
____v_min = A[i][0]____for j in range(M):
________if A[i][j] < v_min:
____________i_min = j
____________v_min = A[i][j]____tmp = A[i][0]____A[i][0] = A[i][i_min]____A[i][i_min] = tmp

for i in range(N):
____i_max = 0
____v_max = A[i][0]____for j in range(M):
________if A[i][j] > v_max:
____________i_max = j
____________v_max = A[i][j]____tmp = A[i][M-1]____A[i][M-1] = A[i][i_max]____A[i][i_max] = tmp

for i in range(N):
____for j in range(M):
________print(«%2d » % A[i][j], end=»)
____print()

s = 0
for i in range(N):
____s += A[0][i]

b = «YES»
for i in range(N):
____s1 = 0
____s2 = 0
____for j in range(N):
________s1 += A[i][j]________s2 += A[j][i]____if s1 != s or s2 != s:
________b = «NO»
________break

for i in range(N):
____tmp = A[i][0]____A[i][0] = A[i][M-1]____A[i][M-1] = tmp

for i in range(N):
____for j in range(M):
________print(«%2d » % A[i][j], end=»)
____print()

for i in range(N):
____for j in range(N):
________if A[i][j] != A[j][i]:
____________b = «NO»
____________break

Источник

Читайте также:  Php return без значения
Оцените статью