2016-11-30 23 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的問題的答案中,你可以多讀一點。