Python模塊:NumPy的高性能科學計算

一、NumPy初識

NumPy是Python中最流行的科學計算庫之一。它提供多維數組對象和一系列用於處理數組的函數。NumPy的核心是ndarray(n-dimensional array)對象,它是一個大小固定、同一類型元素的多維數組。

在使用NumPy之前,需要先安裝它。使用pip命令可以很輕鬆地安裝它。在終端中輸入以下命令即可:

pip install numpy

成功安裝後,我們可以導入NumPy並查看其版本:

import numpy as np

print(np.__version__)

輸出的結果應該類似於「1.16.2」。

二、NumPy數組

NumPy中最重要的對象是ndarray。可以用以下代碼創建一個一維數組:

import numpy as np

arr1d = np.array([1, 2, 3, 4, 5])
print(arr1d)

輸出結果:[1 2 3 4 5]

也可以創建二維、三維甚至更高維度的數組。

從列表創建ndarray時,NumPy會嘗試自動推導出數組中元素的類型:

import numpy as np

arr1d = np.array([1, 2, 3, 4, 5])
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

print(arr1d.dtype)
print(arr2d.dtype)
print(arr3d.dtype)

輸出結果:

int64
int64
int64

可以看出,NumPy會嘗試選擇最小的數據類型以儲存數組中的元素。在這個例子中,數組中的元素都是整數,所以NumPy選擇了int64類型。

數組中的元素可以使用下標進行訪問,如:

import numpy as np

arr1d = np.array([1, 2, 3, 4, 5])
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

print(arr1d[0])
print(arr2d[0, 1])
print(arr3d[1, 0, 1])

輸出結果:

1
2
6

三、NumPy的高級用法

1、數組操作

數組拼接、分裂、重塑、轉置、展平等操作是NumPy中最常用的操作之一。在此僅介紹其中的一些,更多操作請參考NumPy文檔。

例如,可以使用以下代碼將兩個一維數組沿著列方向拼接:

import numpy as np

arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])

result = np.concatenate([arr1, arr2])

print(result)

輸出結果:[1 2 3 4 5 6]

還可以在二維數組上進行拼接操作,如下:

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

result = np.concatenate([arr1, arr2], axis=0)

print(result)

輸出結果:

[[1 2]
 [3 4]
 [5 6]]

還可以使用vstack或hstack函數將數組沿著垂直或水平方向拼接。

重塑數組可以使用reshape函數。例如,可以將一個一維數組重塑為3×3的二維數組:

import numpy as np

arr = np.array([1,2,3,4,5,6,7,8,9])

result = arr.reshape((3, 3))

print(result)

輸出結果:

[[1 2 3]
 [4 5 6]
 [7 8 9]]

transpos函數可以將數組轉置,如下:

import numpy as np

arr = np.arange(9).reshape((3,3))

result = np.transpose(arr)

print(result)

輸出結果:

[[0 3 6]
 [1 4 7]
 [2 5 8]]

flatten函數可以將多維數組展平為一維數組,如下:

import numpy as np

arr = np.arange(9).reshape((3,3))

result = arr.flatten()

print(result)

輸出結果:

[0 1 2 3 4 5 6 7 8]

2、數組運算

NumPy提供了大量的數學函數和運算符,可以像操作標量一樣操作數組。

可以使用以下代碼實現數組的加減乘除:

import numpy as np

a = np.array([1,2,3])
b = np.array([4,5,6])

print(a + b)
print(a - b)
print(a * b)
print(a / b)

輸出結果:

[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4  0.5 ]

可以使用以下代碼實現數組的矩陣乘法:

import numpy as np

a = np.array([[1,2], [3,4]])
b = np.array([[5,6], [7,8]])

print(np.dot(a, b))

輸出結果:

[[19 22]
 [43 50]]

3、數組統計

NumPy可以進行各種統計運算,如平均值、標準差、最大值、最小值等。

可以使用以下代碼求數組的平均值、標準差、最大值、最小值:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

print(np.mean(arr))
print(np.std(arr))
print(np.max(arr))
print(np.min(arr))

輸出結果:

3.0
1.4142135623730951
5
1

除了一維數組之外,NumPy還可以對多維數組進行統計運算。例如,可以使用以下代碼計算二維數組中每一列的平均值:

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6]])

print(np.mean(arr, axis=0))

輸出結果:

[3. 4.]

4、廣播

廣播是指在對兩個數組進行元素操作時,當數組的形狀不同時,對小數組進行擴張以匹配大數組的形狀。廣播操作可以減少內存使用和運算次數。

以下代碼示例演示了廣播的基本原理:

import numpy as np

arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])

result = arr1 * arr2

print(result)

輸出結果:

[ 4 10 18]

可以看出,數組arr1和arr2的形狀不同,但是它們的元素相乘得到的結果仍然是一個長度為3的數組。

5、隨機數生成

NumPy還提供了大量的隨機數生成函數。隨機數生成函數可以用於模擬隨機數據、生成測試數據等。

以下代碼示例生成20個範圍在0-1之間的隨機數:

import numpy as np

result = np.random.rand(20)

print(result)

輸出結果:

[0.13966633 0.8146751  0.78852179 0.45093637 0.73117035 0.7654889
 0.83504567 0.61635283 0.2246247  0.43220779 0.95162422 0.77052108
 0.55811285 0.61789821 0.24398802 0.02599477 0.82493305 0.36772928
 0.19407716 0.1476306 ]

6、圖片處理

NumPy還可以用於圖像的處理。下面的這個例子把圖片中的每一個像素都進行了翻轉:

import numpy as np
from PIL import Image

im = Image.open("test.jpg")
im.show()

im_arr = np.array(im)
im_arr_flip = np.fliplr(im_arr)
im_flip = Image.fromarray(im_arr_flip)

im_flip.show()

輸出結果:

 #顯示原圖

 #顯示翻轉後的圖

7、數據存取

NumPy可以方便地將數組保存到文件中,並從文件中讀取數組數據。

以下代碼示例將數組保存到文件中,並從文件中讀取出來:

import numpy as np

arr = np.array([1,2,3,4,5])

np.save("arr.npy", arr)

arr_loaded = np.load("arr.npy")

print(arr_loaded)

輸出結果:

[1 2 3 4 5]

總結

這篇文章介紹了NumPy的基本用法,包括數組的創建、統計、數組運算、廣播、隨機數生成、圖片處理等。NumPy功能非常強大,有助於我們進行高效的科學計算。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:49
下一篇 2024-12-12 12:49

相關推薦

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

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

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

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

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

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

    編程 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編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python編程二級證書考試相關現已可以上網購買

    計算機二級Python考試是一項重要的國家級認證考試,也是Python編程的入門考試。與其他考試一樣,Python編程二級證書的考生需要進入正式考試,而為了備考,這篇文章將詳細介紹…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

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

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

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29

發表回復

登錄後才能評論