2016-06-10 2 views
1

Может ли кто-нибудь помочь мне с функцией sum?Как суммировать по двум индексам в python?

Я пытаюсь суммировать по двум индексам. Я хочу, чтобы получить следующий результат:

p_t[0, 0]+p_t[0, 1]+p_t[0, 2]+p_t[1, 0]+p_t[1, 1]+p_t[1, 2]+p_t[2,0]+p_t[2, 1]+p_t[2, 2] 

, используя этот код:

num_products=3 
sum (p_t[i, j] for i,j in range(num_products)) 

Но я получаю ошибку:

TypeError Traceback (most recent call last) in() ----> 1 sum (p_t[i, j] for i,j in range(num_products)) in (failed resolving arguments) TypeError: 'int' object is not iterable

Я также попытался это, но не работал ни

sum (p_t[i, j] for i in range(num_products) for j in range(num_products)) 
+0

вы используете NumPy? Кроме того, если вы хотите понять список, окружите его квадратными скобками. –

+0

numpy library также импортирован уже – Zeir

ответ

1
sum(p_t[i][j] for i in range(len(p_t)) for j in range(len(p_t[i]))) 
+0

Он дает ошибку TypeError Traceback (последний звонок последний) в () ----> 1 sum (p_t [i, j] для i в диапазоне (len (p_t)) для j в диапазоне (len (p_t [i]))) ТипError: неподдерживаемый тип операндов для +: 'int' и 'Independent' – Zeir

+0

Можете ли вы дать нам пример того, что на самом деле содержит 'p_t'? –

+0

Произошла ошибка, как я проиндексировал 'p_t', исправленный сейчас. –

0
import numpy as np 
from itertools import product 

a =[[1,2,3],[4,5,6],[3,3,3]] 
p_t = np.array(a) 
num_products = 3 

rslt1 = sum (p_t[i, j] for i,j in product(range(num_products), repeat=2)) 

rslt2= sum (p_t[i, j] for i in range(num_products) for j in range(num_products)) 

Выход:

rslt1 
Out[79]: 30 

rslt2 
Out[80]: 30 

Для первой попытки, вы можете использовать itertools.product.

Для вашей второй попытки, на самом деле, ваш sum (p_t[i, j] for i in range(num_products) for j in range(num_products)) работает с моей стороны.


Как правило, ниже два эквивалентен, когда речь идет о продукте два списка

In [88]: [(i,j) for i in range(2) for j in range(3)] 
Out[88]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)] 

In [89]: [x for x in product(range(2), range(3))] 
Out[89]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)] 
+0

Он также дает ошибку :(Файл «», строка 3 sum (p_t [i, j] для i, j в продукте (диапазон (num_products), repeat = 2) ^ SyntaxError: недействительный синтаксис – Zeir

+0

@ Zeir, я могу запустить код как на Python2.7, так и на Python3.3. Как получилось синтаксическая ошибка? Вы отступали правильно при копировании/вставке моего кода? – MaThMaX

Смежные вопросы