混淆了矩阵和数组

时间:2016-01-10 06:20:02

标签: python arrays

我正在使用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阵列。我想如果没有相同的尺寸你可以添加它们吗?

3 个答案:

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

如果您不理解zipnumpy - 假设两个列表list1list2具有相同的长度,这将完成您的工作

[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)]

如果您将每个list1list2等放入容器(例如tuple或其他list,例如lists = [list1, list2]),您可以而是使用zip(*lists),然后不必更改任何数量的list s的代码。