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

phi*_*sta 2 python arrays list matrix multidimensional-array

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

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

例子:

在列表中制作列表:

ListsInLists = [[1,2],[3,4],[5,6]]
Run Code Online (Sandbox Code Playgroud)

制作一个多维数组:

np.random.rand(3,2)
Run Code Online (Sandbox Code Playgroud)

堆叠数组以制作矩阵:

Array1 = [1,2,3,4]
Array2 = [5,6,7,8]
CompleteArray = vstack((Array1,Array2))
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 6

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

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

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

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

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