python元素明智地添加列表与其他列表

时间:2014-04-06 14:27:21

标签: python numpy

我在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矩阵

我怎样才能有效地添加这两个列表?

4 个答案:

答案 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

ab是您的两个列表,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]]]]]]]] `