2016-11-30 18 views
2

我试图理解人们称之为矩阵和人们在列表中调用列表的区别。Python:多维数组(“矩阵”)与列表中的列表相同吗?

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

实例:

制作一个列表中列出:

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

列表中的列表不一定必须与父列表中的另一个列表长度相同。 – childofsoong

+0

如果你有一个纯粹的numpy矩阵,这个行必须是相同的长度和一致的。否则,它将是一个统一的Python对象系列。 – dawg

+0

Python本身没有内置类型或标准库的数组或矩阵。你指的是NumPy数组吗? –

回答

5

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

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

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

在内部,列表被表示为指向任意Python对象的指针数组。在列表末尾重复追加时,该阵列使用指数过度分配来实现线性性能。另一方面,Numpy数组通常表示为C数组。 (这个答案不包括Numpy对象数组的特殊情况,它可以容纳任何类型的Python对象,它们很少被使用,因为它们有Numpy数组的限制,但没有性能优点)。

3

他们不一样。数组在Python中的内存效率高于列表,并且还有其他可以在数组上执行的功能,这要感谢您无法在列表中执行的numpy模块。

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

如果你想在this的问题的答案中,你可以多读一点。