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
33.9k9 gold badges72 silver badges98 bronze badges
asked Apr 18, 2014 at 0:40
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
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
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
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)
answered Oct 30, 2018 at 10:43
1
import numpy as np
np.sum(M,axis=1)
where M is the matrix
Buddy
10.9k5 gold badges41 silver badges58 bronze badges
answered Nov 27, 2018 at 22:47
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
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()
- Import the reduce() function from the functools module.
- Initialize the input matrix test_list.
- Print the original input matrix.
- Use the reduce() function to iterate over the columns of the input matrix.
- In the reduce() function, use a lambda function to add the corresponding elements of each row of the input matrix.
- Use the zip() function to pair the elements of the rows.
- Append the result to a list.
- 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 ifor i=0 to M-1
print "-- ";
next i
for i=0 to M-1
print sc[i] + " ";
next i