2016-06-10 113 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

的产品?另外,如果你想要一个列表理解,用方括号括起来。 –

+0

numpy库也已导入 – 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(最近调用最后一个) in () ----> 1 sum(p_t [i,j] for i (len(p_t [i])) TypeError:不支持的操作数类型为+:'int'和'独立' – Zeir

+0

您能否给我们一个(len(p_t) “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))工作从我身边。


一般来说,下面两者是等价的,当您使用numpy的涉及到的两个列表

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行 ^ (p_t [i,j]对于产品(范围(num_products),repeat = 2) SyntaxError:无效的语法 – Zeir

+0

@Zeir,我可以在Python2.7和Python3.3上运行代码。它是如何给出语法错误的?当你复制/粘贴我的代码时,你是否正确缩进? – MaThMaX

相关问题