Python Numpy數據類型:高效處理數值計算

一、Numpy基礎知識

NumPy是Python科學計算的基礎庫,提供了高性能的多維數組對象及其相關的運算。NumPy的核心理念是ndarray(n-dimensional array)。它是一個由同類型元素組成的多維數組,可以使用基於數組的計算來操作數據,不需要For循環。這種方式高效而簡潔,也更接近於數學或科學的術語和概念。

>>> import numpy as np
>>> array = np.array([1,2,3])
>>> print(array) # [1,2,3]
>>> print(type(array)) # <class 'numpy.ndarray'>

Numpy數組和Python自帶的列表對象類似,但是Numpy數組須具有相同類型的元素,並支持高效的基於數組的計算方法。創建數組時你可以指定dtype(數據類型),不過Numpy會自動推斷出dtype。

>>> array1 = np.array([1, 2, 3, 4])
>>> print(array1)    # [1 2 3 4]
>>> print(array1.dtype)   # int32
>>> array2 = np.array([1, 2, 3, 4], dtype=float)
>>> print(array2)    # [1. 2. 3. 4.]
>>> print(array2.dtype)   # float64

二、Numpy數組的形狀和軸

ndarray數組不僅有數據類型而且也有一個shape屬性,即數組的形狀。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array)    # [[1 2 3]
                     #  [4 5 6]]
>>> print(array.shape)  # (2, 3)

數組的軸(axis)是從數組的維度角度來說的。
對於二維數組,第0軸是大小為2(數組的行數),第1軸是大小為3(數組的列數)。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array.sum(axis=0)) # [5, 7, 9]
>>> print(array.sum(axis=1)) # [6, 15]

三、Numpy數組的運算

Numpy的優勢在於可以對所有元素進行算術運算,減少常見的for循環操作。

>>> array1 = np.array([1,2,3,4])
>>> array2 = np.array([5,6,7,8])
>>> array3 = np.array([9,10,11,12])
>>> print(array1 + array2)    # [ 6  8 10 12]
>>> print(array2 - array1)    # [4 4 4 4]
>>> print(array1*array2)    # [ 5 12 21 32]
>>> print(array2 / array1)    # [5. 3. 2.33333333 2.]
>>> print(array1**array2)   # [    1    64  2187 65536]
>>> print(array210)    # [False False True True]

除了基本運算外,NumPy還有其他計算函數。例如,統計函數(如平均值,最大值和標準差)和幾何函數(如花式索引,切片和字元串分類函數)。

>>> array = np.array([1,2,3,4])
>>> print(array.mean())    # 2.5
>>> print(array.max())    # 4
>>> print(array.min())    # 1
>>> print(array.std())     # 1.118033988749895
>>> print(array.argmax())  # 3
>>> print(array.argmin())  # 0

四、Numpy數組的矩陣運算

Numpy除了支持基本運算之外,還支持各種簡單(例如點積)和複雜(例如矩陣分解)運算。

>>> A = np.array([[1.,2.],[3.,4.]])
>>> B = np.array([[5.,6.],[7.,8.]])
>>> print(A.dot(B))   # [[19. 22.]
                     #  [43. 50.]]
>>> print(np.dot(A,B))   # [[19. 22.]
                           #  [43. 50.]]
>>> C = np.array([5.,6.])
>>> print(np.dot(A,C))   # [17. 39.]

五、Numpy數組的索引和切片

NumPy數組的索引方法類似於Python列表。

>>> array = np.array([1,2,3,4])
>>> print(array[0])    # 1
>>> print(array[2])    # 3
>>> print(array[:3])    # [1 2 3]
>>> print(array[-2:])    # [3 4]
>>> array[:2] = 0
>>> print(array)    # [0, 0, 3, 4]

對於多維數組,可以使用逗號分隔的索引元組訪問元素。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array[0,1])    # 2
>>> print(array[1,2])    # 6
>>> print(array[:, 1:])    # [[2 3]
                             #  [5 6]]
>>> print(array[:2, 1:])    # [[2 3]
                               #  [5 6]]
>>> print(array[1,:2])     # [4 5]

六、Numpy數組的形狀操作

在NumPy中,可以對現有數組進行重新形狀,只需要使用reshape函數即可。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array.shape)    # (2, 3)
>>> array2 = array.reshape(3,2)
>>> print(array2.shape)     # (3, 2)
>>> array3 = array.reshape(6,-1)
>>> print(array3.shape)    # (6, 1)

調整數組的形狀時不會更改原始數組的數據。反之,改變了數組中的元素會影響到原始數組。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> array2 = array.reshape(3,2)
>>> array[0][1] = 8
>>> print(array2)    # [[1 8]
                      #  [3 4]
                      #  [5 6]]

七、Numpy數組的複製

NumPy ndarray對象的複製主要有兩種:深度複製和淺複製。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> array2 = array.copy()
>>> array[0][1] = 8
>>> print(array2)   # [[1 2 3]
                     #  [4 5 6]]

上述代碼中的array2是array的深複製,所以更改array並不會影響原始數據。

八、Numpy數組的隨機數

NumPy還可以生成隨機數。我們可以使用numpy.random子模塊,它包含我們需要的所有實用程序。

>>> array = np.random.rand(2,2)
>>> print(array)   # [[0.91139848 0.81179606]
                     #  [0.84129243 0.94593798]]
>>> array2 = np.random.randn(2,2)
>>> print(array2)   # [[-0.1420801  -2.58851948]
                      #  [-0.33879746  1.07524694]]
>>> array3 = np.random.randint(low=1, high=10, size=(2,2))
>>> print(array3)   # [[9 6]
                      #  [2 8]]

九、Numpy數組的輸入和輸出

可以將Numpy數組寫入和讀取到磁碟。

>>> array = np.array([1, 2, 3, 4])
>>> np.save('array.npy', array)
>>> array2 = np.load('array.npy')
>>> print(array2)    # [1 2 3 4]

如果有多個數組,則可以使用掩碼編碼,然後將多個數組存儲到單個文件中。

>>> array1 = np.array([1, 2, 3, 4])
>>> array2 = np.array([5, 6, 7, 8])
>>> np.savez('arrays.npz', x=array1, y=array2)
>>> data = np.load('arrays.npz')
>>> print(data['x'])    # [1 2 3 4]
>>> print(data['y'])    # [5 6 7 8]

十、Numpy的應用及拓展

Numpy的基本知識讓我們能夠建立數組和矩陣做統計分析或者圖像處理等一些應用,以及在神經網路中需要對數據進行處理。

除此之外,擴展界面在dataframe(數據幀),時間序列分析,科學技術計算領域也可以方便調用。

十一、總結

Numpy對於數值計算在python中有著非常重要的作用。它提供了ndarray數據類型,用於高效、便利地處理大量數據的數值計算。

本文介紹了Numpy的基礎知識、數組的形狀和軸、數組的運算、數組的矩陣運算、數組的索引和切片、數組的形狀操作、數組的複製、數組的隨機數、Numpy數組的輸入輸出、各種應用的拓展等重要的方面。

原創文章,作者:BREN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138354.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BREN的頭像BREN
上一篇 2024-10-04 00:19
下一篇 2024-10-04 00:19

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論