我在sum of N lists element-wise python
检查了类似的问题但是我的情况稍微复杂一点,因为我在列表中添加了另一个列表列表
我的列表如下所示
[[0 0.014285714 0.035600016]
,[0.014285714 0 0.038359389]
,[0.035600016 0.038359389 0]]
[[0 0.014285714 0.035600016]
,[0.014285714 0 0.038359389]
,[0.035600016 0.038359389 0]]
所以添加这两个然后结果有3乘3矩阵
我怎样才能有效地添加这两个列表?
答案 0 :(得分:1)
如果你正在使用numpy矩阵,@ AlexThornton有最好的答案
如果你正在处理清单,你应该这样做:
summed_list = [[c+d for c,d in zip(i,j)] for i,j in zip(a,b)] #a,b are your two lists
>>> a = [[1,2,3],[1,2,3],[1,2,3]]
>>> b = [[4,5,6],[4,5,6],[4,5,6]]
>>> summed_list = [[c+d for c,d in zip(i,j)] for i,j in zip(a,b)] #a,b are your two lists
>>> print summed_list
[[5,7,9],
[5,7,9],
[5,7,9]]
答案 1 :(得分:1)
您标记了问题numpy
,因此我认为这是正常的:
import numpy as np
a = np.matrix(a)
b = np.matrix(b)
c = a + b
a
和b
是您的两个列表,c
是两个加在一起的列表。
迄今为止最简单的numpy
。 :)
答案 2 :(得分:1)
我可以使用numpy来解决:
>>> a = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> b = [[4, 5, 6], [4, 5, 6], [4, 5, 6]]
>>> from numpy import array, sum
>>> list(array(a) + array(b))
[array([5, 7, 9]), array([5, 7, 9]), array([5, 7, 9])]
OR
>>> sum([a, b], axis=0)
array([[5, 7, 9],
[5, 7, 9],
[5, 7, 9]])
>>>
答案 3 :(得分:0)
这是一个使用' vanilla'的递归解决方案。 python和递归 (此解决方案适用于嵌套元组或列表)
from operator import add
def list_recur(l1, l2, op = operator.add):
if not l1:
return type(l1)([])
elif isinstance(l1[0], type(l1)):
return type(l1)([list_recur(l1[0], l2[0], op)]) + \
list_recur(l1[1:],l2[1:], op)
else:
return type(l1)([op(l1[0], l2[0])]) + \
list_recur(l1[1:], l2[1:], op)
此解决方案接受参数list1,list2以及您要执行的操作element-wise
(默认添加)。
例如, list_recur([ [1, 2, 3, [4, 5] ], [1, 2, 3, [4, 5] ])
将返回[ [2, 4, 6, [8, 10] ]
。
更复杂的例子也会起作用:
list_recur([[[[[1,[[[[2, 3]]]]]]]], [[[[3, [[[[4, 1]]]]]]]], lambda x, y: \
x < y)
将返回[[[[True, [[[[True, False]]]]]]]]
`