我正在使用python中的列表,数组和矩阵进行一些练习,我对某些事感到困惑。
如果我这样做:
list1 = [1,2,3,4]
list2 = [2,3,4,5]
print list1 + list2
输出:
I get [1,2,3,4,2,3,4,5]
我认为这就像昨天我做了类似的事情,但我得到了
输出2:
[3,5,7,9]
在两个列表上实际添加每个元素的值。但我实际上期待它是第一个输出,但它增加了值。
我暂时没有完成线性代数或概率和统计。我在output1中得到的输出调用的方法是什么?和输出2?我把自己弄糊涂了。
修改 http://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.add.html 如果你看第二个例子,他们会做一个3x3阵列+ 1x3阵列。我想如果没有相同的尺寸你可以添加它们吗?
答案 0 :(得分:2)
使用标准列表时,添加被定义为两个列表的连接
import numpy as np
list1 = [1,2,3,4]
list2 = [2,3,4,5]
print list1 + list2
# [1, 2, 3, 4, 2, 3, 4, 5]
使用numpy类型时,add被定义为按元素添加而不是列表连接。
array1 = np.array(list1)
array2 = np.array(list2)
print array1 + array2
# [3 5 7 9]
这通常称为vectorized操作。在数组较大的情况下,它可能比在结构上迭代更快,因为向量化操作使用由numpy提供的高度优化的实现。
答案 1 :(得分:0)
如果您不理解zip
或numpy
-
假设两个列表list1
和list2
具有相同的长度,这将完成您的工作
[a[i]+b[i] for i in xrange(len(a))]
PS:只使用list1 + list2
只能连接这两个列表。
要添加您需要迭代列表的每个元素。
答案 2 :(得分:0)
您可以使用sum()
和zip()
规范获取“Output2”:
result = [sum(item) for item in zip(list1, list2)]
如果您将每个list1
,list2
等放入容器(例如tuple
或其他list
,例如lists = [list1, list2]
),您可以而是使用zip(*lists)
,然后不必更改任何数量的list
s的代码。