Сумма элементов побочной диагонали матрицы python

Сумма диагональных элементов в матрице

Я пытаюсь выяснить сумму диагональных элементов в матрице. Здесь n — размер квадратной матрицы, а — матрица. Может кто-нибудь объяснить мне, что здесь происходит.

n = 3 a = [[11,2,4],[4,5,6],[10,8,-12]] sum_first_diagonal = sum(a[i][i] for i in range(n)) sum_second_diagonal = sum(a[n-i-1][n-i-1] for i in range(n)) print(str(sum_first_diagonal)+" "+str(sum_first_diagonal)) 

7 ответов

Попробуйте это для суммирования вашей второй диагонали:

Внутренний цикл обращается к этим записям:

>>> n = 3 >>> [(i, n-i-1) for i in range(n)] [(0, 2), (1, 1), (2, 0)] 

И суммированное значение этой диагонали для вашей примерной матрицы:

>>> n = 3 >>> sum(a[i][n-i-1] for i in range(n)) 19 

Ошибка в вашем коде заключается в использовании одного и того же выражения для обоих измерений:

Которая снова обработает первую диагональ в обратном порядке [(2, 2), (1, 1), (0, 0)] и даст вам одинаковую сумму дважды.

Используйте библиотеку numpy, которая является мощной для любых матричных вычислений. Для вашего конкретного случая:

import numpy as np a = [[11,2,4],[4,5,6],[10,8,-12]] b = np.asarray(a) print 'Diagonal (sum): ', np.trace(b) print 'Diagonal (elements): ', np.diagonal(b) 

Вы можете легко установить numpy с помощью pip или другими способами, которые вы найдете на многих сайтах.

Если вам нужны все диагонали, а не только главная, проверьте this, которая также использует numpy.

Mhawke, если вы хотите рассчитать антидиагональность (вторичная диагональ), как описано в википедии, вы можете перевернуть матрица в NumPy

import numpy as np a = [[11,2,4],[4,5,6],[10,8,-12]] b = np.asarray(a) b = np.fliplr(b) print 'Antidiagonal (sum): ', np.trace(b) print 'Antidiagonal (elements): ', np.diagonal(b) 

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

Получить сумму первой диагонали,

n = 3 a = [[11,2,4],[4,5,6],[10,8,-12]] sum_1_diagonal = 0 for x in range(0, n): for y in range(0, n): if x == y: sum_1_diagonal = sum_1_diagonal + a[x][y] 

Получить сумму второй диагонали,

n = 3 a = [[11,2,4],[4,5,6],[10,8,-12]] sum_2_diagonal = 0 for x in range(0, n): for y in range(0, n): if x + y == n - 1: sum_2_diagonal = sum_2_diagonal + a[x][y] 
def sum_diagnol(): import random sum=0 r1=int(input("row")) c1=int(input("col")) a=[[random.random()for col in range(c1)]for row in range(r1)] print("enter elements") for i in range(r1): for j in range(c1): a[i][j]=int(input("enter elements")) r2=int(input("row")) c2=int(input("col")) b=[[random.random()for col in range(c2)]for row in range(r2)] print("enter elements") for i in range(r2): for j in range(c2): b[i][j]=int(input("enter elements")) c=[[random.random()for col in range(c2)]for row in range(r1)] if(c1==r2): for i in range(r1): for j in range(c2): c[i][j]=0 for k in range(c2): c[i][j]=a[j][k]*b[k][j] else: print("multiplication not possible") for i in range(r1): for j in range(c2): print(c[i][j],end=" ") print() sum_diagnol() 

Поскольку вы знаете положение диагональных элементов для строки i , вы можете написать это довольно плотно, например:

d = sum(row[i] + row[-1-i] for i, row in a) 

И, для матриц нечетного размера, вы не должны добавлять центральный элемент дважды:

if len(a)%2: centre = len(a)//2 d -= a[centre][centre] 

Я нашел простой алгоритм для решения этой задачи.

  1. Сохраните квадратную матрицу в одном одномерном массиве.
  2. Пусть ‘n’ будет порядком квадратной матрицы.
  3. Есть две диагонали, одна из которых начинается с самого левого элемента в верхней строке и другой, начинающийся с n-го элемента верхней строки.
  4. Получить индексы чисел по диагонали, которая начинается с самого левого элемента в верхней строке, из массива, содержащего все числа в матрице; просто добавьте (n + 1) рекурсивно, начиная с индекса 1. То есть индексы элементов в диагонали слева направо в массиве: 1, 1+ (n + 1), (n + 2) + (n + 1), (2n + 3) + (n + 1) до последний индекс массива.
  5. Получить индексы чисел другой диагонали из массива, содержащего все числа в матрице; просто добавьте (n-1) рекурсивно к индексам, начиная с индекса, равного ‘n’, который является порядком квадратной матрицы. То есть, индексами элементов в диагонали справа налево в массиве являются n, n + (n-1), (2n-1) + (n-1) и так далее, пока индекс не будет равен длине массива. (п — 1 ) » .
  6. Если порядок нечетный, то вычтите среднее число в массиве из окончательной суммы.
 #include using namespace std; int sumOfDiagonalNumbersInSquareMatrix(int numberArray[],int order) < int sumOfLeftToRightDiagonal = 0; int sumOfRightToLeftDiagonal = 0; int length = order*order; for(int i=0; ifor(int i=(order-1);i <=length-order;i+=(order-1))< //cout<if(order % 2 != 0) < return (sumOfLeftToRightDiagonal + sumOfRightToLeftDiagonal) - numberArray[(length/2)]; >return (sumOfLeftToRightDiagonal + sumOfRightToLeftDiagonal); > int main()< int nums[] = ; cout

Источник

Найти максимальный и минимальный элементы главной диагонали и сумму элементов побочной диагонали

Дана матрица размера NxN. Найти максимальный и минимальный элементы
главной диагонали и сумму элементов побочной диагонали.

Найти сумму элементов побочной диагонали. И поменять элементы главной диагонали на первую строку матрицы
Разработка проекта с использованием элементов ООП по условию задания. Дана квадратная матрица.

Динамически распределение памяти. Матрицы. Найти максимальный ниже побочной диагонали, и минимальный главной диагонали
В матрице n-го порядка найти максимальный среди элементов , лежащих ниже побочной диагонали, и.

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
arr = [[9, 2, 1], [4, 0, 6], [3, 8, 2]] res_min = float('inf') res_max = float('-inf') res_sum = 0 for i in range(len(arr)): for j in range(len(arr)): if i == j: res_min = arr[i][j] if arr[i][j]  res_min else res_min res_max = arr[i][j] if arr[i][j] > res_max else res_max if i == len(arr) - 1 - j: res_sum += arr[i][j] print(res_min) print(res_max) print(res_sum)

Источник

Найти сумму элементов побочной диагонали

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

Найти количество нечетных элементов на побочной диагонали и индексы максимума среди элементов
Дана матрица размера N x N. Найти количество нечетных элементов на побочной диагонали и индексы.

Найти в массиве и вывести на экран сумму элементов, лежащих выше главной диагонали, без элементов главной диагонали
найти в массиве и вывести на экран сумму элементов, лежащих выше главной диагонали, без элементов.

В области, лежащей выше побочной диагонали найти произведение и количество положительных четных элементов
как с помощь random будет выглядеть код, подскажите пожалуйста Дан массив A(10,10). В области.

Найти максимальный элемент среди элементов, расположенных выше побочной диагонали матрицы (Pascal -> Python)
Дан массив А . Найти максимальный элемент среди элементов, расположенных выше побочной диагонали.

Найти сумму элементов над и под главной и побочной диагоналями
Дана матрица размером NxN. найти сумму элементов над и под главной и побочной диагоналями: from.

Найти след матрицы (сумму элементов главной диагонали)
Товарищи , подскажите, пожалуйста! Нужно найти след матрицы(сумму элементов главной диагонали).

Найти сумму элементов каждой диагонали матрицы, параллельной главной
Дана квадратная матрица A порядка M. Найти сумму элементов каждой ее диагонали, параллельной.

Найти максимальную сумму элементов диагоналей матрицы, параллельных главной диагонали
Здравствуйте, написал код для поиска максимальной суммы элементов диагонали матрицы, параллельной.

Источник

Сумма элементов главной и побочной диагоналей матрицы

Заполните матрицу. Найдите сумму элементов ее главной диагонали и отдельно сумму элементов побочной.

from random import random # заполнение матрицы N = 5 matrix = [] for i in range(N): row = [] for j in range(N): row.append(int(random()*10)) matrix.append(row) # вывод матрицы на экран for row in matrix: print(row) # сумма элементов главной диагонали sum_main = 0 # сумма элементов побочной диагонали sum_secondary = 0 # Количество итераций цикла соответствует # размерности квадратной матрицы. for i in range(N): # У элементов главной диагонали # совпадают оба индекса. # Из матрицы извлекается элемент # и добавляется к сумме. sum_main += matrix[i][i] # У элементов побочной диагонали # второй индекс # отсчитывается с конца. sum_secondary += matrix[i][N - i - 1] # вывод сумм print(sum_main) print(sum_secondary)

Похожие записи:

Это вдохновляющее руководство для тех, кто стремится преодолеть алкогольную зависимость и вернуться к здоровому образу жизни.

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

Воспоминания революционера и публициста Василия Васильевича Водовозова (1864–1933), охватывающие период с 1880‐х и до

Книга «Первый кубанский („Ледяной“) поход» представляет собой третий том из серии, посвященной Белому движению

Дмитрий Михайлович Урнов (род. в 1936 г., Москва), литератор, выпускник Московского Университета, доктор филологических

Первая книга серии. Это сборник документальных очерков, каждый из которых посвящён необычному и пугающему криминальному феномену,

Книга рассказывает историю рождения и развития шифров и кодов, криптологии и специальных видов засекреченной

В отличие от криптографии, которая шифрует содержимое секретного сообщения, стеганография скрывает сам факт его

Источник

Читайте также:  Javascript document location reloaded
Оцените статью