知道Numpy嗎?它為什么是Python科學(xué)計(jì)算中不可或缺的一環(huán)
NumPy是Python的一個(gè)科學(xué)計(jì)算庫(kù),它提供了高效的多維數(shù)組操作和數(shù)學(xué)函數(shù)。NumPy是許多其他Python科學(xué)庫(kù)的基礎(chǔ),因?yàn)樗峁┝丝焖俚臄?shù)值計(jì)算和數(shù)據(jù)處理能力。在本文中,我們將深入介紹NumPy的使用,包括數(shù)組創(chuàng)建、索引、切片、數(shù)學(xué)運(yùn)算、線性代數(shù)等方面的內(nèi)容。
數(shù)組創(chuàng)建
NumPy中最基本的對(duì)象是數(shù)組(array),它是一種多維數(shù)組。在NumPy中,數(shù)組可以通過(guò)多種方式創(chuàng)建。以下是一些常用的數(shù)組創(chuàng)建方式:
從Python列表創(chuàng)建數(shù)組
NumPy可以從Python列表(list)創(chuàng)建數(shù)組。以下是一個(gè)示例:
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]
從元組創(chuàng)建數(shù)組
NumPy也可以從元組(tuple)創(chuàng)建數(shù)組。以下是一個(gè)示例:
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函數(shù)創(chuàng)建數(shù)組
使用zeros函數(shù)可以創(chuàng)建一個(gè)全是0的數(shù)組。以下是一個(gè)示例:
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函數(shù)創(chuàng)建數(shù)組
使用ones函數(shù)可以創(chuàng)建一個(gè)全是1的數(shù)組。以下是一個(gè)示例:
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函數(shù)創(chuàng)建數(shù)組
使用arange函數(shù)可以創(chuàng)建一個(gè)等差數(shù)列數(shù)組。以下是一個(gè)示例:
import numpy as np
my_array = np.arange(0, 10, 2)
print(my_array)
輸出:
[0 2 4 6 8]
使用linspace函數(shù)創(chuàng)建數(shù)組
使用linspace函數(shù)可以創(chuàng)建一個(gè)等間隔數(shù)列數(shù)組。以下是一個(gè)示例:
import numpy as np
my_array = np.linspace(0, 1, 5)
print(my_array)
輸出:
[0. 0.25 0.5 0.75 1. ]
數(shù)組索引和切片
NumPy數(shù)組可以像Python列表一樣進(jìn)行索引和切片。以下是一些常用的數(shù)組索引和切片方式:
使用整數(shù)索引
可以使用整數(shù)索引獲取數(shù)組中的元素。以下是一個(gè)示例:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[2])
輸出:
3
使用切片
可以使用切片獲取數(shù)組中的元素。以下是一個(gè)示例:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[1:4])
輸出:
[2 3 4]
使用布爾索引
可以使用布爾索引獲取數(shù)組中符合條件的元素。以下是一個(gè)示例:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
mask = my_array > 3
print(my_array[mask])
輸出:
[4 5]
數(shù)學(xué)運(yùn)算
NumPy提供了大量的數(shù)學(xué)函數(shù),包括基本的算術(shù)運(yùn)算、三角函數(shù)、指數(shù)函數(shù)、對(duì)數(shù)函數(shù)等。以下是一些常用的數(shù)學(xué)函數(shù):
基本算術(shù)運(yùn)算
NumPy提供了基本的算術(shù)運(yùn)算,包括加、減、乘、除、求余等。以下是一個(gè)示例:
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]
三角函數(shù)
NumPy提供了多種三角函數(shù),包括sin、cos、tan、arcsin、arccos、arctan等。以下是一個(gè)示例:
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]
指數(shù)函數(shù)和對(duì)數(shù)函數(shù)
NumPy提供了多種指數(shù)函數(shù)和對(duì)數(shù)函數(shù),包括exp、exp2、log、log2等。以下是一個(gè)示例:
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]
線性代數(shù)
NumPy也提供了豐富的線性代數(shù)函數(shù)。以下是一些常用的線性代數(shù)函數(shù):
矩陣乘法
NumPy提供了矩陣乘法運(yùn)算。以下是一個(gè)示例:
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提供了矩陣求逆運(yùn)算。以下是一個(gè)示例:
import numpy as np
a = np.array([[1, 2], [3, 4]])
print(np.linalg.inv(a))
輸出:
[[-2. 1. ]
[ 1.5 -0.5]]
特征值和特征向量
NumPy提供了特征值和特征向量的計(jì)算函數(shù)。以下是一個(gè)示例:
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]]
示例代碼
下面是一個(gè)完整的使用NumPy的示例代碼,包括數(shù)組創(chuàng)建、索引、切片、數(shù)學(xué)運(yùn)算、線性代數(shù)等方面的內(nèi)容:
import numpy as np
# 從Python列表創(chuàng)建數(shù)組
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
print(my_array)
# 從元組創(chuàng)建數(shù)組
my_tuple = (1, 2, 3, 4, 5)
my_array = np.array(my_tuple)
print(my_array)
# 使用zeros函數(shù)創(chuàng)建數(shù)組
my_array = np.zeros((3, 4))
print(my_array)
# 使用ones函數(shù)創(chuàng)建數(shù)組
my_array = np.ones((3, 4))
print(my_array)
# 使用arange函數(shù)創(chuàng)建數(shù)組
my_array = np.arange(0, 10, 2)
print(my_array)
# 使用linspace函數(shù)創(chuàng)建數(shù)組
my_array = np.linspace(0, 1, 5)
print(my_array)
# 使用整數(shù)索引
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])
# 基本算術(shù)運(yùn)算
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)
# 三角函數(shù)
a = np.array([0, np.pi/2, np.pi])
print(np.sin(a))
print(np.cos(a))
print(np.tan(a))
# 指數(shù)函數(shù)和對(duì)數(shù)函數(shù)
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]]
結(jié)論
本文介紹了NumPy數(shù)組的創(chuàng)建、索引、切片、數(shù)學(xué)運(yùn)算、線性代數(shù)等方面的內(nèi)容。NumPy是Python科學(xué)計(jì)算的重要組件之一,具有強(qiáng)大的計(jì)算能力和高效的性能,是數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等領(lǐng)域必不可少的工具之一。