Доступ к строкам и столбцам в матрице Python - PullRequest
0 голосов
/ 02 февраля 2020
t = [[0],[1]]

Мне нужна сумма строки и столбца, если матрица на самом деле одномерна:

s1 = sum(t[0][:])
s2 = sum(t[:][0])

Я получаю t[0][:] и t[:][0] = 0, тогда как это должны быть списки, первое строка и первый столбец.

т.е. t[:][0] должен был быть == [0, 1]

Как я могу правильно получить суммы и доступ к столбцу и строке?

Ответы [ 3 ]

1 голос
/ 02 февраля 2020

Вы можете попробовать это.

>>> a=[[1,2,3],
   [4,5,6],
   [7,8,9]]
>>> 
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> def row_sum(_list,row_idx):
    return sum(_list[row_idx])

>>> row_sum(a,0)
6   #summation of 1st row i.e 1+2+3
>>> def col_sum(_list,col_idx):
    cols=list(zip(*_list))
    return sum(cols[col_idx])

>>> col_sum(a,0)
12 #summation of 1st column i.e 1+4+7
>>> col_sum(a,1)
15 #summation of 2nd column i.e 2+5+8

Вот подход numpy.

import numpy as np
a=[[1,2,3],
       [4,5,6],
       [7,8,9]]
a=np.array(a)
def nprow_sum(_list,row_idx):
    return sum(_list[row_idx])
def npcol_sum(_list,col_idx):
    return sum(_list[:,col_idx])
0 голосов
/ 02 февраля 2020

Решение с использованием списка понимания:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

sums_by_row = [sum(row) for row in matrix]

sums_by_col = [sum([row[icol] for row in matrix]) for icol in range(len(matrix[0]))]

print(sums_by_row)  # [6, 15, 24]

print(sums_by_col)  # [12, 15, 18]
0 голосов
/ 02 февраля 2020

вы можете сделать таким образом,

предположим, что ваш ввод:

t=[[1,2,3],[4,5,6],[7,8,9]]

#sum of row 
[sum(x) for x in t]

#sum of columns
col_sum=[]
row_length = len(t[0]) #row length 
for idx in range(row_length):
  s=0
  for i in range(len(t)):
   s +=t[i][idx]
  col_sum.append(s)

Примечание: t[:][0] совпадает с t[0] предположим, что у вас t=[[0],[1],[2]] тогда t[:2] == [[0],[1]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...