Форум сайта python.su
Приветствую всех!
Изучаю обработку многомерных массивов. Задача - вставлена в код.
'''1. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти наибольший элемент столбца матрицы A, для которого сумма абсолютных значений элементов максимальна. ''' import math a = [[48, 16, 33, -8, 22, -23, 25, 39, 6], [-11, 13, -9, -44, 34, -6, -6, -4, 19], [-26, -33, 7, -18, -5, -25, 13, 0, 14], [-50, 8, -23, 43, -11, 7, 50, 44, 28], [-10, -43, 13, -48, 13, 18, 7, -49, -18], [-29, -8, 31, -43, -27, 22, 37, 21, -36], [1, 35, -38, 34, -5, -35, 47, 13, 7]] 'Находим суммы столбцов (в виде списка "c")' c=[] for j in a: b=0 for i in a: b=b+math.fabs(a[j][i]) c.append(b) print(c) 'Далее - идет последующая обработка массива (матрицы)...'
b=b+math.fabs(a[j][i]) TypeError: list indices must be integers, not list
Отредактировано Lork (Март 25, 2017 21:45:25)
Офлайн
import math a = [[48, 16, 33, -8, 22, -23, 25, 39, 6], [-11, 13, -9, -44, 34, -6, -6, -4, 19], [-26, -33, 7, -18, -5, -25, 13, 0, 14], [-50, 8, -23, 43, -11, 7, 50, 44, 28], [-10, -43, 13, -48, 13, 18, 7, -49, -18], [-29, -8, 31, -43, -27, 22, 37, 21, -36], [1, 35, -38, 34, -5, -35, 47, 13, 7]] 'Находим суммы столбцов (в виде списка "c")' c=[] for num, j in enumerate(a[0]): b=0 for i in a: b=b+math.fabs(i[num]) c.append(b) print(c)
Офлайн
RomissevdБлагодарю за ответ и подсказку, но до enumerate я пока ещё не дошёл, посему пытаюсь использовать простые методы. Вообще, в этом вопросе для меня важнее понять принцип работы for…in для многомерных массивов, а он почему-то
a[j][i]
Офлайн
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] size = len(a[0]) c = [0 for _ in xrange(size)] for i in a: for j in xrange(size): c[j] += i[j] print(c)
за список принимает, хотя я имел в виду обращение к элементу матрицыне так
>>> l = [11,12,33] >>> for i in l: print i 11 12 33 >>> for i in l: print i,l[i] 11 Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> for i in l: print i,l[i] IndexError: list index out of range
Отредактировано vic57 (Март 26, 2017 00:29:04)
Офлайн
Lorkа с чего вы взяли что что i и j это будут индексы?
за список принимает, хотя я имел в виду обращение к элементу матрицы
[48, 16, 33, -8, 22, -23, 25, 39, 6]
import math a = [[48, 16, 33, -8, 22, -23, 25, 39, 6], [-11, 13, -9, -44, 34, -6, -6, -4, 19], [-26, -33, 7, -18, -5, -25, 13, 0, 14], [-50, 8, -23, 43, -11, 7, 50, 44, 28], [-10, -43, 13, -48, 13, 18, 7, -49, -18], [-29, -8, 31, -43, -27, 22, 37, 21, -36], [1, 35, -38, 34, -5, -35, 47, 13, 7]] 'Находим суммы столбцов (в виде списка "c")' c=[] for j in a: # тут мы получаем списки из которых состоит ваш список. Например для первого прохода это будет [48, 16, 33, -8, 22, -23, 25, 39, 6] b=0 for i in j: # а тут уже непосредственно проходимся по элементам вложеного списка 48, 16, ... и тд. опять же i это не индекс, это сам жлемент. b=b+math.fabs(i) c.append(b) print(c)
import math a = [[48, 16, 33, -8, 22, -23, 25, 39, 6], [-11, 13, -9, -44, 34, -6, -6, -4, 19], [-26, -33, 7, -18, -5, -25, 13, 0, 14], [-50, 8, -23, 43, -11, 7, 50, 44, 28], [-10, -43, 13, -48, 13, 18, 7, -49, -18], [-29, -8, 31, -43, -27, 22, 37, 21, -36], [1, 35, -38, 34, -5, -35, 47, 13, 7]] 'Находим суммы столбцов (в виде списка "c")' c=[] for j in range(len(a)): #len(a) это длинна нашего списка спиков, считайте это к-во рядов. b=0 for i in range(len(a[j])): #len(a[j]) это длинна уже вложеного спика, считайте к-во столбцов. b=b + math.fabs(a[j][i]) c.append(b) print(c)
[code python][/code]
Отредактировано PEHDOM (Март 26, 2017 00:42:36)
Офлайн
vic57
a = [,
,
]
size = len(a)
c =
for i in a:
for j in xrange(size):
c += i
print©
c = [0 for _ in xrange(size)] NameError: name 'xrange' is not defined
Офлайн
Lorkxrange это из второго пайтона, в третем его убрли, остался только range
Чего-то не пошло:
[code python][/code]
Офлайн
PEHDOMСпасибо! Кажись, начал понимать где ноги растут
Офлайн
LorkВ реальных вычислительных задачах представление матриц в виде вложенных списков и последующие операции над ними с помощью циклов приводит к очень медленным вычислениям. В этом случае для работы рекомендуется пакет NumPy.
Изучаю обработку многомерных массивов
import numpy as np # a = [ [....], [....]] # matrix `a` a = np.array(a) answer = np.max(a[:, np.argmax(np.sum(np.abs(a), axis=0))])
Офлайн
scidam
Офлайн