Python NumPy:科學計算的基礎庫

NumPy是Python中一個重要的第三方免費開源數值計算庫。它可以高效地處理任意維度的數組,是Python用於進行科學計算的基礎庫之一。在數據分析、機器學習、人工智能等領域得到了廣泛應用。本文將從以下幾個方面介紹NumPy的用法與特性。

一、創建ndarray

NumPy最重要的數據結構是數組ndarray。創建一個ndarray的方法是使用np.array函數,傳遞給它一個Python列表或元組。下面的代碼演示了如何創建一個一維數組:

import numpy as np

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

輸出:

[1 2 3 4 5]

可以使用np.asarray函數從Python列表或元組創建一個ndarray。np.zeros和np.ones函數可以創建全零或全一數組。np.eye函數可以創建單位矩陣。下面的代碼演示了如何創建一個二維數組:

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

c = np.asarray([(1, 2), (3, 4)])
print(c)

d = np.zeros((3, 4))
print(d)

e = np.ones((2, 3))
print(e)

f = np.eye(5)
print(f)

輸出:

[[1 2]
 [3 4]]
[[1 2]
 [3 4]]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1. 1.]
 [1. 1. 1.]]
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

二、數組操作

NumPy可以對數組進行多種操作。數組加法、減法、乘法、除法等運算都是可以直接使用的。np.dot函數可以進行矩陣乘法。

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

c = a + b
print(c)

d = a - b
print(d)

e = a * b
print(e)

f = a / b
print(f)

g = np.dot(a, b)
print(g)

輸出:

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

可以使用ndarray的大量方法對數組進行操作。如ndarray.shape可以獲取數組的形狀,比如一個n行m列的數組,shape的返回值為(n, m)。ndarray.size可以獲取數組元素的總數。ndarray.reshape可以改變數組的形狀,使其變為另一個形狀。ndarray.transpose可以將數組轉置。下面的代碼演示了這些方法的用法:

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

print(a.shape)
print(a.size)

b = a.reshape(1, 9)
print(b)

c = a.transpose()
print(c)

輸出:

(3, 3)
9
[[1 2 3 4 5 6 7 8 9]]
[[1 4 7]
 [2 5 8]
 [3 6 9]]

三、索引與切片

NumPy的數組索引方式與Python中列表的方式相同。可以使用中括號[]對數組進行索引。對於一個n維數組,需要指定n個下標才能獲取到某一個元素。也可以對數組進行切片,獲取數組的部分元素。可以使用冒號:對數組進行切片。下面的代碼演示了數組的索引與切片:

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

print(a[0])
print(a[-1])
print(a[1:4])
print(a[:3])
print(a[3:])
print(a[:-2])
print(a[::2])

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

print(b[1][2])
print(b[1, 2])
print(b[0:2, 1:3])

輸出:

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

四、廣播(Broadcasting)

NumPy中的廣播是一種強大的機制,它可以將不同形狀的數組進行計算。例如,將一個形狀為(3, 1)的數組與一個形狀為(1, 3)的數組相加會產生一個形狀為(3, 3)的數組。廣播的機制使得數組的運算非常方便和高效。下面的代碼演示了廣播的用法:

a = np.array([1, 2, 3])
b = 2
c = a + b
print(c)

d = np.array([[1, 2, 3], [4, 5, 6]])
e = np.array([1, 2, 3])
f = d + e
print(f)

g = np.array([[1], [2], [3]])
h = np.array([4, 5, 6])
i = g * h
print(i)

輸出:

[3 4 5]
[[2 4 6]
 [5 7 9]]
[[ 4  5  6]
 [ 8 10 12]
 [12 15 18]]

五、NumPy的常用統計方法

NumPy中的ndarray類型提供了幾種不同的統計函數。最常用的函數包括計算數組中所有元素的求和、均值和標準差等。下面的代碼演示了一些常用的統計函數:

a = np.array([1, 2, 3, 4, 5])
print(np.sum(a))
print(np.mean(a))
print(np.std(a))

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

print(np.sum(b))
print(np.sum(b, axis=0))
print(np.sum(b, axis=1))

輸出:

15
3.0
1.4142135623730951
10
[4 6]
[3 7]

六、隨機數生成

在數據分析和機器學習中,隨機數生成是非常重要的。NumPy提供了大量的隨機數生成函數。下面的代碼演示了一些常用的隨機數生成函數:

a = np.random.rand(3, 3)
print(a)

b = np.random.randn(3, 3)
print(b)

c = np.random.randint(1, 10, size=(3, 3))
print(c)

d = np.random.choice([1, 2, 3, 4, 5], size=(3, 3))
print(d)

輸出:

[[0.52451401 0.73476582 0.72145149]
 [0.12381385 0.98456016 0.90398534]
 [0.25585383 0.42355746 0.0779397 ]]
[[ 1.18620182  0.19244916  0.95212394]
 [ 0.31774084 -0.51186413  0.15535013]
 [-0.7440901  -0.19090821 -0.33039907]]
[[1 6 3]
 [5 9 6]
 [9 1 9]]
[[3 3 2]
 [5 4 5]
 [4 3 2]]

七、文件輸入輸出

NumPy提供了用於讀取和寫入磁盤數據的函數。ndarray可以保存到磁盤文件中,並從磁盤文件中加載。下面的代碼演示了文件輸入輸出的用法:

a = np.array([1, 2, 3, 4, 5])
np.save('a.npy', a)

b = np.load('a.npy')
print(b)

輸出:

[1 2 3 4 5]

八、小結

本文介紹了NumPy的基本用法,包括創建ndarray、數組操作、索引與切片、廣播、常用的統計方法、隨機數生成和文件輸入輸出。NumPy具有高效的數組處理能力,是進行科學計算和數據分析的重要工具。NumPy的完整代碼可以參考下面的代碼塊:

import numpy as np

# 創建ndarray
a = np.array([1, 2, 3, 4, 5])
print(a)

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

c = np.asarray([(1, 2), (3, 4)])
print(c)

d = np.zeros((3, 4))
print(d)

e = np.ones((2, 3))
print(e)

f = np.eye(5)
print(f)

# 數組操作
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

c = a + b
print(c)

d = a - b
print(d)

e = a * b
print(e)

f = a / b
print(f)

g = np.dot(a, b)
print(g)

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

print(a.shape)
print(a.size)

b = a.reshape(1, 9)
print(b)

c = a.transpose()
print(c)

# 索引與切片
a = np.array([1, 2, 3, 4, 5])

print(a[0])
print(a[-1])
print(a[1:4])
print(a[:3])
print(a[3:])
print(a[:-2])
print(a[::2])

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

print(b[1][2])
print(b[1, 2])
print(b[0:2, 1:3])

# 廣播
a = np.array([1, 2, 3])
b = 2
c = a + b
print(c)

d = np.array([[1, 2, 3], [4, 5, 6]])
e = np.array([1, 2, 3])
f = d + e
print(f)

g = np.array([[1], [2], [3]])
h = np.array([4, 5, 6])
i = g * h
print(i)

# 常用統計方法
a = np.array([1, 2, 3, 4, 5])
print(np.sum(a))
print(np.mean(a))
print(np.std(a))

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

print(np.sum(b))
print(np.sum(b, axis=0))
print(np.sum(b, axis=1))

# 隨機數生成
a = np.random.rand(3, 3)
print(a)

b = np.random.randn(3, 3)
print(b)

c = np.random.randint(1, 10, size=(3, 3))
print(c)

d = np.random.choice([1, 2, 3, 4, 5], size=(3, 3))
print(d)

# 文件輸入輸出
a = np.array([1, 2, 3, 4, 5])
np.save('a.npy', a)

b = np.load('a.npy')
print(b)

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

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

相關推薦

  • 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

發表回復

登錄後才能評論