知道Numpy嗎?它為什么是Python科學計算中不可或缺的一環
NumPy是Python的一個科學計算庫,它提供了高效的多維數組操作和數學函數。NumPy是許多其他Python科學庫的基礎,因為它提供了快速的數值計算和數據處理能力。在本文中,我們將深入介紹NumPy的使用,包括數組創建、索引、切片、數學運算、線性代數等方面的內容。
數組創建
NumPy中最基本的對象是數組(array),它是一種多維數組。在NumPy中,數組可以通過多種方式創建。以下是一些常用的數組創建方式:
從Python列表創建數組
NumPy可以從Python列表(list)創建數組。以下是一個示例:
import numpy as np
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
print(my_array)
輸出:
[1 2 3 4 5]
從元組創建數組
NumPy也可以從元組(tuple)創建數組。以下是一個示例:
import numpy as np
my_tuple = (1, 2, 3, 4, 5)
my_array = np.array(my_tuple)
print(my_array)
輸出:
[1 2 3 4 5]
使用zeros函數創建數組
使用zeros函數可以創建一個全是0的數組。以下是一個示例:
import numpy as np
my_array = np.zeros((3, 4))
print(my_array)
輸出:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
使用ones函數創建數組
使用ones函數可以創建一個全是1的數組。以下是一個示例:
import numpy as np
my_array = np.ones((3, 4))
print(my_array)
輸出:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
使用arange函數創建數組
使用arange函數可以創建一個等差數列數組。以下是一個示例:
import numpy as np
my_array = np.arange(0, 10, 2)
print(my_array)
輸出:
[0 2 4 6 8]
使用linspace函數創建數組
使用linspace函數可以創建一個等間隔數列數組。以下是一個示例:
import numpy as np
my_array = np.linspace(0, 1, 5)
print(my_array)
輸出:
[0. 0.25 0.5 0.75 1. ]
數組索引和切片
NumPy數組可以像Python列表一樣進行索引和切片。以下是一些常用的數組索引和切片方式:
使用整數索引
可以使用整數索引獲取數組中的元素。以下是一個示例:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[2])
輸出:
3
使用切片
可以使用切片獲取數組中的元素。以下是一個示例:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[1:4])
輸出:
[2 3 4]
使用布爾索引
可以使用布爾索引獲取數組中符合條件的元素。以下是一個示例:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
mask = my_array > 3
print(my_array[mask])
輸出:
[4 5]
數學運算
NumPy提供了大量的數學函數,包括基本的算術運算、三角函數、指數函數、對數函數等。以下是一些常用的數學函數:
基本算術運算
NumPy提供了基本的算術運算,包括加、減、乘、除、求余等。以下是一個示例:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)
輸出:
[11 22 33 44 55]
[-9 -18 -27 -36 -45]
[ 10 40 90 160 250]
[0.1 0.1 0.1 0.1 0.1]
[1 2 3 4 5]
三角函數
NumPy提供了多種三角函數,包括sin、cos、tan、arcsin、arccos、arctan等。以下是一個示例:
import numpy as np
a = np.array([0, np.pi/2, np.pi])
print(np.sin(a))
print(np.cos(a))
print(np.tan(a))
輸出:
[0.0000000e+00 1.0000000e+00 1.2246468e-16]
[ 1.000000e+00 6.123234e-17 -1.000000e+00]
[ 0.00000000e+00 1.63312394e+16 -1.22464680e-16]
指數函數和對數函數
NumPy提供了多種指數函數和對數函數,包括exp、exp2、log、log2等。以下是一個示例:
import numpy as np
a = np.array([1, 2, 3])
print(np.exp(a))
print(np.exp2(a))
print(np.log(a))
print(np.log2(a))
輸出:
[ 2.71828183 7.3890561 20.08553692]
[2. 4. 8.]
[0. 0.69314718 1.09861229]
[0. 1. 1.5849625]
線性代數
NumPy也提供了豐富的線性代數函數。以下是一些常用的線性代數函數:
矩陣乘法
NumPy提供了矩陣乘法運算。以下是一個示例:
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.matmul(a, b))
輸出:
[[19 22]
[43 50]]
矩陣求逆
NumPy提供了矩陣求逆運算。以下是一個示例:
import numpy as np
a = np.array([[1, 2], [3, 4]])
print(np.linalg.inv(a))
輸出:
[[-2. 1. ]
[ 1.5 -0.5]]
特征值和特征向量
NumPy提供了特征值和特征向量的計算函數。以下是一個示例:
import numpy as np
a = np.array([[1, 2], [3, 4]])
w, v = np.linalg.eig(a)
print(w)
print(v)
輸出:
[-0.37228132 5.37228132]
[[-0.82456484 -0.41597356]
[ 0.56576746 -0.90937671]]
示例代碼
下面是一個完整的使用NumPy的示例代碼,包括數組創建、索引、切片、數學運算、線性代數等方面的內容:
import numpy as np
# 從Python列表創建數組
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
print(my_array)
# 從元組創建數組
my_tuple = (1, 2, 3, 4, 5)
my_array = np.array(my_tuple)
print(my_array)
# 使用zeros函數創建數組
my_array = np.zeros((3, 4))
print(my_array)
# 使用ones函數創建數組
my_array = np.ones((3, 4))
print(my_array)
# 使用arange函數創建數組
my_array = np.arange(0, 10, 2)
print(my_array)
# 使用linspace函數創建數組
my_array = np.linspace(0, 1, 5)
print(my_array)
# 使用整數索引
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[2])
# 使用切片
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[1:4])
# 使用布爾索引
my_array = np.array([1, 2, 3, 4, 5])
mask = my_array > 3
print(my_array[mask])
# 基本算術運算
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)
# 三角函數
a = np.array([0, np.pi/2, np.pi])
print(np.sin(a))
print(np.cos(a))
print(np.tan(a))
# 指數函數和對數函數
a = np.array([1, 2, 3])
print(np.exp(a))
print(np.exp2(a))
print(np.log(a))
print(np.log2(a))
# 矩陣乘法
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.matmul(a, b))
# 矩陣求逆
a = np.array([[1, 2], [3, 4]])
print(np.linalg.inv(a))
# 特征值和特征向量
a = np.array([[1, 2], [3, 4]])
w, v = np.linalg.eig(a)
print(w)
print(v)
輸出:
[1 2 3 4 5]
[1 2 3 4 5]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[0 2 4 6 8]
[0. 0.25 0.5 0.75 1. ]
3
[2 3 4]
[4 5]
[11 22 33 44 55]
[-9 -18 -27 -36 -45]
[ 10 40 90 160 250]
[0.1 0.1 0.1 0.1 0.1]
[1 2 3 4 5]
[0.0000000e+00 1.0000000e+00 1.2246468e-16]
[ 1.000000e+00 6.123234e-17 -1.000000e+00]
[ 0.00000000e+00 1.63312394e+16 -1.22464680e-16]
[ 2.71828183 7.3890561 20.08553692]
[2. 4. 8.]
[0. 0.69314718 1.09861229]
[0. 1. 1.5849625]
[[19 22]
[43 50]]
[[-2. 1. ]
[ 1.5 -0.5]]
[-0.37228132 5.37228132]
[[-0.82456484 -0.41597356]
[ 0.56576746 -0.90937671]]
結論
本文介紹了NumPy數組的創建、索引、切片、數學運算、線性代數等方面的內容。NumPy是Python科學計算的重要組件之一,具有強大的計算能力和高效的性能,是數據科學、機器學習、深度學習等領域必不可少的工具之一。