Python:多维数组("矩阵")与列表中的列表相同吗?

时间:2016-11-30 18:35:06

标签: python arrays list matrix multidimensional-array

我试图理解人们称之为矩阵的内容与人们在列表中调用列表的内容之间的差异。

它们是否相同,一旦创建,你可以对它们做同样的事情(在它们中以相同的方式引用元素等)。

示例:

在列表中制作列表:

ListsInLists = [[1,2],[3,4],[5,6]]

制作多维数组:

np.random.rand(3,2)

堆叠数组以制作矩阵:

Array1 = [1,2,3,4]
Array2 = [5,6,7,8]
CompleteArray = vstack((Array1,Array2))

2 个答案:

答案 0 :(得分:6)

列表列表与二维Numpy数组非常不同。

  • 列表具有动态大小,可以容纳任何类型的对象,而数组具有固定大小和统一类型的条目。
  • 在列表列表中,每个子列表可以具有不同的大小。数组沿每个轴都有固定的尺寸。
  • 数组存储在连续的内存块中,而列表中的对象可以存储在堆上的任何位置。

Numpy数组更具限制性,但提供更高的性能和内存效率。它们还为矢量化数学运算提供了方便的功能。

在内部,列表表示为指向任意Python对象的指针数组。当在列表的末尾重复附加时,该数组使用指数过度分配来实现线性性能。另一方面,Numpy数组通常表示为C数组。

(这个答案不包括Numpy对象数组的特殊情况,它也可以容纳任何类型的Python对象。它们很少使用,因为它们有Numpy数组的限制,但是不具备性能优势。)

答案 1 :(得分:3)

他们不一样。数组中的数组比列表更有内存效率,并且由于你无法在列表上执行numpy模块,因此可以在数组上执行其他函数。

对于计算,使用numpy中的数组往往比使用内置列表函数快得多。

如果您想要回答this问题,可以多阅读一下。