Как найти сумму столбцов матрицы питон

I can sum the items in column zero fine. But where do I change the code to sum column 2, or 3, or 4 in the matrix?
I’m easily stumped.

def main():
    matrix = []

    for i in range(2):
        s = input("Enter a 4-by-4 matrix row " + str(i) + ": ") 
        items = s.split() # Extracts items from the string
        list = [ eval(x) for x in items ] # Convert items to numbers   
        matrix.append(list)

    print("Sum of the elements in column 0 is", sumColumn(matrix))

def sumColumn(m):
    for column in range(len(m[0])):
        total = 0
        for row in range(len(m)):
            total += m[row][column]
        return total

main()

lvc's user avatar

lvc

33.9k9 gold badges72 silver badges98 bronze badges

asked Apr 18, 2014 at 0:40

vonbraun's user avatar

numpy could do this for you quite easily:

def sumColumn(matrix):
    return numpy.sum(matrix, axis=1)  # axis=1 says "get the sum along the columns"

Of course, if you wanted do it by hand, here’s how I would fix your code:

def sumColumn(m):
    answer = []
    for column in range(len(m[0])):
        t = 0
        for row in m:
            t += row[column]
        answer.append(t)
    return answer

Still, there is a simpler way, using zip:

def sumColumn(m):
    return [sum(col) for col in zip(*m)]

answered Apr 18, 2014 at 0:49

inspectorG4dget's user avatar

inspectorG4dgetinspectorG4dget

109k27 gold badges146 silver badges238 bronze badges

3

One-liner:

column_sums = [sum([row[i] for row in M]) for i in range(0,len(M[0]))]

also

row_sums = [sum(row) for row in M]

for any rectangular, non-empty matrix (list of lists) M. e.g.

>>> M = [[1,2,3],
>>>     [4,5,6],
>>>     [7,8,9]]
>>>
>>> [sum([row[i] for row in M]) for i in range(0,len(M[0]))]
[12, 15, 18] 
>>> [sum(row) for row in M]
[6, 15, 24]

answered Jan 30, 2015 at 17:55

ChrisW's user avatar

ChrisWChrisW

1,26512 silver badges12 bronze badges

1

Here is your code changed to return the sum of whatever column you specify:

def sumColumn(m, column):
    total = 0
    for row in range(len(m)):
        total += m[row][column]
    return total

column = 1
print("Sum of the elements in column", column, "is", sumColumn(matrix, column))

answered Apr 18, 2014 at 1:08

user3286261's user avatar

user3286261user3286261

3913 silver badges7 bronze badges

To get the sum of all columns in the matrix you can use the below python numpy code:

matrixname.sum(axis=0)

Karol Dowbecki's user avatar

answered Oct 30, 2018 at 10:43

Vaka Chiranjeevi's user avatar

1

import numpy as np
np.sum(M,axis=1)

where M is the matrix

Buddy's user avatar

Buddy

10.9k5 gold badges41 silver badges58 bronze badges

answered Nov 27, 2018 at 22:47

Fernando's user avatar

This can be made easier if you represent the matrix as a flat array:

m = [
    1,2,3,4,
    10,11,12,13,
    100,101,102,103,
    1001,1002,1003,1004
]

def sum_column(m, n):
    return sum(m[i] for i in range(n, 4 * 4, 4))

answered Apr 18, 2014 at 0:50

michaelmeyer's user avatar

michaelmeyermichaelmeyer

7,9556 gold badges30 silver badges35 bronze badges

Sometimes, we are encountered with such problem in which we need to find the sum of each column in a matrix i.e sum of each index in list of lists. This kind of problem is quite common and useful in competitive programming. Let’s discuss certain ways in which this problem can be solved. 

Method #1: Using sum() + list comprehension + zip()

The combination of the above methods are required to solve this particular problem. The sum function is used to get the required sum value and zip function provides the combination of like indices and then list is created using list comprehension.

Python3

test_list = [[3, 7, 6], [1, 3, 5], [9, 3, 2]]

print("The original list : " + str(test_list))

res = [sum(idx) for idx in zip(*test_list)]

print("The Summation of each index list is : " + str(res))

Output

The original list : [[3, 7, 6], [1, 3, 5], [9, 3, 2]]
The Summation of each index list is : [13, 13, 13]

Time complexity of this code is O(N*M) where N is the number of rows and M is the number of columns in the matrix. The reason for this is that the code is iterating through each element of the matrix, which requires N * M operations.
Auxiliary space used in this code is O(n), where n is the number of columns in the matrix. This is because the code uses a list comprehension, to sum up each column, which requires O(n) space to store the intermediate results.

Method #2: Using map() + sum() + zip() 

This works in almost similar way as the above method, but the difference is just that we use map function to build the sum list rather than using list comprehension. 

Python3

test_list = [[3, 7, 6], [1, 3, 5], [9, 3, 2]]

print("The original list : " + str(test_list))

res = list(map(sum, zip(*test_list)))

print("The Summation of each index list is : " + str(res))

Output : 

The original list : [[3, 7, 6], [1, 3, 5], [9, 3, 2]]
The Summation of each index list is : [13, 13, 13]

Time complexity: O(n), where n is the number of elements in the matrix.
Auxiliary space: O(m), where m is the number of columns in the matrix.

Method #3: Using for loops

Python3

test_list = [[3, 7, 6], [1, 3, 5], [9, 3, 2]]

print("The original list : " + str(test_list))

res=[]

for i in range(0,len(test_list)):

    s=0

    for j in range(0,len(test_list)):

        s+=test_list[j][i]

    res.append(s)

print("The Summation of each index list is : " + str(res))

Output

The original list : [[3, 7, 6], [1, 3, 5], [9, 3, 2]]
The Summation of each index list is : [13, 13, 13]

Time Complexity : O(N*N)
Auxiliary Space : O(N)

Method 4: Using the numpy library.

Step-by-step approach:

  • Install and import the numpy library
  • Convert the list to a numpy array
  • Use the np.sum() function with the axis parameter set to 0 to get the column-wise sum
  • Convert the numpy array back to a list using the tolist() function
  • Print the result

Below is the implementation of the above approach:

Python3

import numpy as np

test_list = [[3, 7, 6], [1, 3, 5], [9, 3, 2]]

print("The original list : " + str(test_list))

np_array = np.array(test_list)

res = np.sum(np_array, axis=0)

res_list = res.tolist()

print("The Summation of each index list is : " + str(res_list))

Output:

The original list : [[3, 7, 6], [1, 3, 5], [9, 3, 2]]
The Summation of each index list is : [13, 13, 13]

Time complexity: O(n^2) since we have to iterate through each element of the matrix.
Auxiliary space: O(n^2) since we have to create a numpy array to store the matrix elements.

Method 5 : Using the built-in function functools.reduce()

  1. Import the reduce() function from the functools module.
  2. Initialize the input matrix test_list.
  3. Print the original input matrix.
  4. Use the reduce() function to iterate over the columns of the input matrix.
  5. In the reduce() function, use a lambda function to add the corresponding elements of each row of the input matrix.
  6. Use the zip() function to pair the elements of the rows.
  7. Append the result to a list.
  8. Print the resulting list of column sums.
     

Python3

from functools import reduce

test_list = [[3, 7, 6], [1, 3, 5], [9, 3, 2]]

print("The original list : " + str(test_list))

res = reduce(lambda x,y: [i+j for i,j in zip(x,y)], test_list)

print("The Summation of each index list is : " + str(res))

Output

The original list : [[3, 7, 6], [1, 3, 5], [9, 3, 2]]
The Summation of each index list is : [13, 13, 13]

Time complexity: The time complexity of the reduce function is O(n) where n is the number of rows of the input matrix. Within each iteration of the reduce function, the time complexity of the lambda function is O(m) where m is the number of columns of the input matrix. Therefore, the overall time complexity of this approach is O(n*m).

Auxiliary space: The auxiliary space used by this approach is O(m), where m is the number of columns of the input matrix. This is because the resulting list of column sums has length equal to the number of columns of the input matrix. The lambda function also uses O(m) auxiliary space to store the result of the zip() function. Therefore, the overall auxiliary space of this approach is O(m).

Method 6: Using recursion

Step-by-step approach:

  • Define a recursive function that takes in a list of lists and an empty list to store the column-wise sums.
  • Base case: If the length of the first inner list is 0, return the list of column-wise sums.
  • Recursive case: Use a list comprehension to extract the first element of each inner list and append it to a new list. Recursively call the function with the remaining lists and the updated list of column-wise sums.
  • Use a for loop to iterate through the column-wise sums list and add the corresponding elements of each inner list.
  • Return the resulting list of sums.

Below is the implementation of the above approach:

Python3

def column_sums_recursive(lst, sums):

    if len(lst[0]) == 0:

        return sums

    else:

        first_elements = [sublst[0] for sublst in lst]

        sums.append(sum(first_elements))

        remaining_lists = [sublst[1:] for sublst in lst]

        return column_sums_recursive(remaining_lists, sums)

test_list = [[3, 7, 6], [1, 3, 5], [9, 3, 2]]

print("The original list : " + str(test_list))

res_list = column_sums_recursive(test_list, [])

print("The Summation of each index list is : " + str(res_list))

Output

The original list : [[3, 7, 6], [1, 3, 5], [9, 3, 2]]
The Summation of each index list is : [13, 13, 13]

Time complexity: O(nm), where n is the number of inner lists and m is the length of the longest inner list.
Auxiliary space: O(n), for the list of column-wise sums.

Last Updated :
04 Apr, 2023

Like Article

Save Article

Найти сумму столбца в матрице питона?

Я знаю, как сделать сумму строки следующим образом: row = [sum(row) for row in Matrix], но как найти сумму столбца в матрице питона?

Если у меня есть эта матрица:

Matrix =[[0, 2, 2],
         [0, 2, 2], 
         [0, 0, 2]]

Стоит сделать 3 значения, это: 0,4, а также 6,

2017-04-22 00:24

6
ответов

Посмотрите здесь тот же вопрос, отличный пример кода. Посмотрите на

def sumColumn(m, column):
    total = 0
    for row in range(len(m)):
        total += m[row][column]
    return total

column = 1
print("Sum of the elements in column", column, "is", sumColumn(matrix, column))

вы можете посмотреть и каждый раз добавлять один к индексу, чтобы вы смотрели на следующий столбец

или вы можете использовать zip:

def sumColumn(m):
    return [sum(col) for col in zip(*m)]

или простой способ отсюда:

sum(m[:,i]) for i in range(4)

2017-04-22 00:28

Более Pythonic способ, чем некоторые другие ответы:

[sum(row[i] for row in Matrix) for i in range(len(Matrix[0]))]

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

2017-04-22 00:28

Отсюда

Попробуйте это, он суммирует матрицу по указанному столбцу:

def sumColumn(m, column):
total = 0
for row in range(len(m)):
    total += m[row][column]
return total

column = 1
print("Sum of the elements in column", column, "is", sumColumn(matrix, column))

2017-04-22 00:31

Сумму строк в матрице вы можете сделать таким образом. Создаем простую матрицу:

import pandas as pd

cc =[100, 0, 0, 0]
aaa = [80, 9, 1, 1]
fff = [10, 0, 8, 0]
hhh = [10, 1, 1, 9]

df = pd.DataFrame({'A': cc, 'B': aaa,'C': fff,'D': hhh})
matrix = df.values
matrix

сумма строк

sumR = matrix.sum(axis=1) 
sumR

массив ([200, 10, 10, 10])

sumR = list(sumR.flatten())
sumR

[200, 10, 10, 10]

сумма столбцов

sumC = matrix.sum(axis=0) 
sumC

массив ([100, 91, 18, 21])

sumC = list(sumC.flatten())
sumC

[100, 91, 18, 21]

2020-06-18 16:37

      import numpy as np
a = np.array([[1, 2, 3],
              -1, 2, 6])

print(a.cumsum(axis = 0))

Выход:

      >>> np.array([[1, 2, 3],
              [0, 4, 9]])

Последнее поле представляет собой сумму столбцов

Если вы хотите получить сумму поля, просто введите «1» вместо «0» на оси.

      In [121]: a.cumsum(axis = 1)
Out[121]:
array([[ 1,  3,  6],
       [-1,  1,  7]], dtype=int32)

2021-10-24 09:54

import numpy as np
Matrix =[[0, 2, 2],
         [0, 2, 2], 
         [0, 0, 2]]
np.asarray(Matrix).sum(axis=0)
Out[66]: array([0, 4, 6])

Это говорит само за себя, но кто-то просит прокомментировать код.

Код сначала преобразует матрицу в пустой массив, а затем суммирует массив по столбцам, о чем этот вопрос.

2017-04-22 00:41

Возвращает сумму элементов матрицы по заданной оси.

Обратитесь к numpy.sum для получения полной документации.

See also

numpy.sum

Notes

Это то же самое, что и ndarray.sum , за исключением того, что ndarray возвращается объект matrix .

Examples

>>> x = np.matrix([[1, 2], [4, 3]])
>>> x.sum()
10
>>> x.sum(axis=1)
matrix([[3],
        [7]])
>>> x.sum(axis=1, dtype='float')
matrix([[3.],
        [7.]])
>>> out = np.zeros((2, 1), dtype='float')
>>> x.sum(axis=1, dtype='float', out=np.asmatrix(out))
matrix([[3.],
        [7.]])

Перейти к содержанию

Суммы строк и столбцов матрицы

Просмотров 10.6к. Обновлено 15 октября 2021

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

Поскольку двумерный массив обычно перебирается построчно, то сумму строк считать проще. Можно, заполняя строку матрицы и выводя ее элементы на экран, накапливать в переменной сумму элементов строки и выводить ее в конце строки.

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

Выводить суммы столбцов следует в отдельном цикле.

Pascal


const
M = 10;
N = 5;
var
a: array[1..N,1..M] of integer;
i, j: byte;
s: integer;
sc: array[1..M] of integer;
begin
for i:= 1 to M do
sc[i] := 0;

for i:=1 to N do begin
s := 0;
for j:=1 to M do begin
a[i,j] := random(10);
write(a[i,j]:6);
s := s + a[i,j];
sc[j] := sc[j] + a[i,j]
end;
writeln (' |', s);
end;
for i:= 1 to M do
write('--':6);
writeln;
for i:= 1 to M do
write(sc[i]:6);
writeln;

end.



Пример выполнения программы:

5 5 7 8 6 8 5 8 4 6 |62
6 3 4 2 8 0 9 2 3 4 |41
7 8 5 4 5 3 9 8 0 3 |52
0 6 0 3 8 9 7 1 8 8 |50
9 4 7 8 4 5 7 6 1 7 |58
-- -- -- -- -- -- -- -- -- --
27 26 23 25 31 25 37 25 16 28

Язык Си

сумма элементов каждого столбца матрицы c++


#include < stdio.h>
#define M 10
#define N 5
main() {
int a[N][M];
int sc[M];
int s, i, j;
srand(time(NULL));
for (i=0; i< M; i++) sc[i] = 0;
for (i=0; i< N; i++) {
s = 0;
for (j=0; j< M; j++) {
a[i][j] = rand() % 10;
printf("%5d", a[i][j]);
s += a[i][j];
sc[j] += a[i][j];
}
printf(" |%dn", s);
}
for (i=0; i< M; i++)
printf("%5s", "--");
printf("n");
for (i=0; i< M; i++)
printf("%5d", sc[i]);
printf("n");
}

Python

сумма элементов строки матрицы python (питон)


from random import random
M = 10
N = 5
a = []
for i in range(N):
b = []
for j in range(M):
b.append(int(random()*11))
print("%3d" % b[j], end='')
a.append(b)
print(' |', sum(b))

for i in range(M):
print(" --", end='')
print()

for i in range(M):
s = 0
for j in range(N):
s += a[j][i]
print("%3d" % s, end='')
print()



Пример(ы) выполнения программы на языке Python:

6 7 3 10 10 10 4 2 6 5 | 63
2 8 0 9 0 4 9 3 6 3 | 44
5 3 1 10 5 6 5 2 0 9 | 46
10 9 10 8 7 8 5 2 10 9 | 78
3 3 6 0 4 1 6 10 10 3 | 46
-- -- -- -- -- -- -- -- -- --
26 30 20 37 26 29 29 19 32 29
В Python используется немного иной алгоритм решения задачи. Сначала создается пустой список - будущая матрица. Далее в цикле в нее добавляются вложенные списки.

Суммы строк матрицы вычисляются с помощью функции sum(), которой передается текущий список-строка цикла.

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

КуМир


алг суммы строк столбцов
нач
цел M = 10, N = 5
цел таб a[1:N,1:M], sc[1:M]
цел i, j, s
нц для i от 1 до M
sc[i] := 0
кц

нц для i от 1 до N
s := 0
нц для j от 1 до M
a[i,j] := int(rand(0,10))
вывод a[i,j], " "
s := s + a[i,j]
sc[j] := sc[j] + a[i,j]
кц
вывод " |", s, нс
кц

нц для i от 1 до M
вывод "---"
кц
вывод нс
нц для i от 1 до M
вывод sc[i], " "
кц
кон

Basic-256


M = 10
N = 5
dim a(N,M)
dim sc(M)
for i = 0 to N-1
s = 0
for j=0 to M-1
a[i,j] = int(rand*10)
print a[i,j] + " ";
s = s + a[i,j]
sc[j] = sc[j] + a[i,j]
next j
print " |" + s
next i

for i=0 to M-1
print "-- ";
next i
print
for i=0 to M-1
print sc[i] + " ";
next i
print

Добавить комментарий