為什麼應該使用 NumPy 陣列而不是巢狀 Python 列表?


在本文中,我們將向您展示為什麼使用 NumPy 陣列而不是巢狀 Python 列表,以及它們之間的一些異同點。

Python NumPy 庫

NumPy 是一個為 Python 中的陣列高效工作而設計的 Python 庫。它速度快、易於學習且儲存效率高。它還改進了資料處理的方式。在 NumPy 中,我們可以生成一個 n 維陣列。要使用 NumPy,我們只需將其匯入到我們的程式中,然後我們就可以輕鬆地在程式碼中使用 NumPy 的功能。

Python 巢狀列表

Python 列表是元素的可變且有序的集合。在 Python 中,列表用方括號表示。

  • 巢狀列表可以是同構的或異構的。

  • 在列表上,逐元素操作是不可能的。

  • Python 列表預設情況下是一維的。但是,我們可以建立一個 N 維列表。但它也將是一個儲存另一個一維列表的一維列表。

  • 列表的元素不必在記憶體中連續。

  • Python 列表是有用的通用容器,可用於插入、新增、刪除和連線資料。

  • 列表有兩個缺點:它們不支援像逐元素加法和乘法這樣的“向量化”運算,並且由於它們可以包含不同型別的物件,因此 Python 必須為每個元素儲存型別資訊並在處理每個元素時執行型別分派程式碼。

NumPy 陣列

  • NumPy 更高效、更方便,因為它免費提供了大量向量和矩陣運算,從而減少了工作量和程式碼複雜性。與巢狀迴圈相比,Numpy 也更高效。

  • NumPy 陣列速度更快,幷包含更多內建函式來執行 FFT、卷積、快速搜尋、線性代數、基本統計、直方圖和其他任務。

  • Numpy 陣列允許對大量資料執行高階數學和其他運算。

  • 陣列預設情況下是同構的,這意味著陣列中的所有資料都必須是相同的資料型別。(請注意,可以在 Python 中類似地建立結構化陣列。)

  • 逐元素操作是可行的。

  • Numpy 陣列包含各種函式、方法和變數來幫助我們進行矩陣計算工作。

  • 陣列的元素在記憶體中緊密排列在一起。例如,二維陣列必須在其所有行中具有相同數量的列。另一方面,三維陣列必須在每張卡上具有相同數量的行和列。

巢狀列表的表示

示例

# creating a nested list inputList= [[2, 7, 8], [1, 5, 4]] # printing nested List print(inputList)

輸出

執行上述程式後,將生成以下輸出:

[[2, 7, 8], [1, 5, 4]]

一維 NumPy 陣列的表示

演算法(步驟)

以下是執行所需任務的演算法/步驟:

  • 使用 import 關鍵字,使用別名 (np) 匯入 **numpy** 模組。

  • 使用 numPy 模組的 **array()** 函式(返回一個 ndarray。ndarray 是一個滿足給定要求的陣列物件)來建立一個一維 numpy 陣列。

  • 列印一維陣列

# importing numpy module with an alias name import numpy as np # creating a 1-dimensional numpy array inputArray = np.array([12, 4, 8, 6]) # printing 1-D array print(inputArray)

輸出

執行上述程式後,將生成以下輸出:

[12 4 8 6]

多維 NumPy 陣列的表示

示例

# importing numpy module with an alias name import numpy as np # creating a multi-dimensional numpy array inputArray = np.array([(2, 7, 8), (1, 5, 4)]) # printing multi-dimensional array print(inputArray)

輸出

執行上述程式後,將生成以下輸出:

[[2 7 8]
 [1 5 4]]

使用 NumPy 陣列優於 Python 列表的優勢

  • 佔用更少的記憶體。

  • 比 Python 列表快。

  • 易於使用。

列表和陣列之間的相似之處

  • 它們都使用方括號([])。

  • 陣列和列表都是可變的(都可以修改元素)。

  • NumPy 陣列和列表都可以被索引並用於切片。

NumPy 陣列和 Python 列表之間的區別

NumPy 陣列 Python 列表
陣列可以直接處理數學運算 列表不能直接進行數學運算。
比列表佔用更少的記憶體 佔用更多記憶體
陣列比列表快 與陣列相比,列表相對較慢
修改起來比較複雜 更容易修改
陣列不能包含不同的大小資料 列表可以包含多個巢狀的大小資料。
陣列不能儲存不同的資料型別 列表可以儲存不同的資料型別

NumPy 陣列和 Python 列表的比較

記憶體消耗

# importing numpy module with an alias name import numpy as np # importing system module import sys # creating a nested list inputList= [[2, 7, 8], [1, 5, 4]] # printing the size of each item of list(bytes) print("The size of each item of list(bytes) = ",sys.getsizeof(inputList)) # printing size of the entire list(bytes) print("The size of the entire list(bytes) = ",sys.getsizeof(inputList)*len(inputList)) # creating a Numpy array with same elements inputArray= np.array([(2, 7, 8), (1, 5, 4)]) # printing each element of Numpy array(bytes) size print("Each element of Numpy array(bytes) size = ",inputArray.itemsize) # printing the entire Numpy array(bytes) size print("The entire Numpy array(bytes) size = ", inputArray.size*inputArray.itemsize)

輸出

執行上述程式後,將生成以下輸出:

The size of each item of list(bytes) = 88
The size of the entire list(bytes) = 176
Each element of Numpy array(bytes) size = 8
The entire Numpy array(bytes) size = 48

我們可以觀察到,巢狀列表比 numpy 陣列消耗了更多的記憶體。

結論

在本文中,我們瞭解了為什麼 NumPy 陣列在 Python 中比巢狀列表更有用。我們使用一個示例來演示 NumPy 陣列在記憶體效率方面優於巢狀列表。

更新於: 2022 年 10 月 20 日

2K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.