NumPy(Numerical Python)是一個Python庫,主要用于高效地處理多維陣列和矩陣計算,它是科學計算領域中使用最廣泛的一個庫,
在NumPy中,陣列是最核心的概念,用于存盤和操作資料,
NumPy陣列是一種多維陣列物件,可以存盤相同型別的元素,它支持高效的數學運算和線性代數操作,
1. 資料型別
numpy 陣列要求其中的元素必須是同一個型別的,雖然喪失了一些靈活性,卻帶來的性能的極大提升,
numpy的陣列中如果有字串,那么所有的值都變成字符型了,
再進行數學運算時會報錯,如下所示
import numpy as np
arr = np.array([1, "abc", 3.1])
arr + 1
#錯誤資訊
UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types ...
numpy的標準資料型別主要是各類數值型別,畢竟這個庫主要就是用來做數值運算的,
numpy支持如整數(int8、int16、int32、int64)、浮點數(float32、float64)、復數(complex64、complex128)等型別,
此外,numpy還支持一些特殊型別,如布爾型(bool)、無型別(void)等,
具體請參考檔案:https://numpy.org/doc/stable/user/basics.types.html
選擇資料型別時,注意考慮資料型別的記憶體占用和計算效率,以選擇最優的資料型別,
2. 維,秩和軸
numpy陣列的維度,秩和軸這三個概念經常用到,
其中維度和軸是同樣的,維度是編程中常用說法,軸是線性代數中常用說法,
numpy中維度或軸的資訊通過shape屬性獲取,比如:
import numpy as np
arr = np.array([[[1, 2, 3], [1, 2, 3]]])
arr.shape
#結果:
(1, 2, 3)
這個陣列有3個維度(軸),但是每個維度(軸)方向的長度不一樣,分別是1,2,3
秩是指軸的個數,也就是維度的數量,比如上面的陣列,秩就是3,
numpy中秩的資訊都過ndim屬性來獲取,比如:
arr.ndim
#結果:
3
3. 創建方式
學習numpy的陣列,最重要的目的就是掌握如何運用numpy的陣列來進行數值計算,
學習numpy陣列的各類運算操作之前,掌握numpy提供的各種陣列創建方法必不可少,
numpy提供了多種陣列創建方式,每種方式都有其優點和意義,
根據實際需求選擇合適的創建方式可以方便地創建具有特定形狀和大小的陣列,并為其分配記憶體空間,方便后續高效的學習各種數學運算和線性代數操作,
3.1. zeros
zeors方法可以創建指定維度和型別的陣列,陣列的每個元素都是0,
一維,型別分別為int和float的陣列,
import numpy as np
np.zeros(5, dtype=int)
#>>> array([0, 0, 0, 0, 0])
np.zeros(5, dtype=float)
#>>> array([0., 0., 0., 0., 0.])
不同維度的陣列,
import numpy as np
np.zeros((3,3), dtype=float)
#>>>
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
np.zeros((2,4), dtype=float)
#>>>
array([[0., 0., 0., 0.],
[0., 0., 0., 0.]])
3.2. ones
ones方法可以創建指定維度和型別的陣列,陣列的每個元素都是1,
一維,型別分別為int和float的陣列,
import numpy as np
np.ones(5, dtype=int)
#>>> array([1, 1, 1, 1, 1])
np.ones(5, dtype=float)
#>>> array([1., 1., 1., 1., 1.])
不同維度的陣列,
import numpy as np
np.ones((3,3), dtype=float)
#>>>
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
np.ones((2,4), dtype=float)
#>>>
array([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
3.3. linspace
linspace函式用來構建均勻分布的陣列,
比如,創建一個均勻分布在0~1之間的5個值的陣列,
import numpy as np
np.linspace(0, 1, 5)
#>>> array([0. , 0.25, 0.5 , 0.75, 1. ])
linspace函式有個endpoint屬性,用來控制是否包含最后一個元素,
下面看看這個屬性設定之后的區別:
import numpy as np
np.linspace(0, 1, 5, endpoint=False)
#>>> array([0. , 0.2, 0.4, 0.6, 0.8])
#其結果相當于不加endpoint屬性時,
#平均分割成6份后取前5份
np.linspace(0, 1, 6)
#>>> array([0. , 0.2, 0.4, 0.6, 0.8, 1. ])
3.4. random
random函式是隨機生成numpy陣列,也是使用最多的函式,
隨機生成值在0~1之間的陣列,可以指定任意維度:
import numpy as np
np.random.random((3, 3))
#>>>
array([[0.53058991, 0.72007309, 0.44017494],
[0.83616085, 0.65746936, 0.56416387],
[0.56300549, 0.63187035, 0.87307415]])
隨機生成值在 0~100 之間整數的陣列,可以指定任意維度,
隨機值的范圍通過第一個和第二個引數指定,
import numpy as np
np.random.randint(0, 100, (3, 3))
#>>>
array([[24, 55, 62],
[79, 86, 3],
[14, 7, 63]])
隨機生成一個均值為0,標準差為1 的符合正態分布的陣列,可以指定任意維度,
均值和標準差通過第一個和第二個引數指定,
np.random.normal(0, 1, (4, 3))
#>>>
array([[ 1.65321113, 1.19167512, -0.13037245],
[ 1.16451259, -0.58080834, 0.34491977],
[-0.77054092, -0.95344105, -0.12393142],
[-0.05896611, -1.25108846, -1.21772507]])
3.5. eye
eye函式是用來創建單位矩陣的,
如果只有一個引數,創建的就是方陣,
np.eye(4)
#>>>
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
如果創建行列不一樣的矩陣,那么,行和列哪個軸短,就以哪個為準生成方陣,其他值都是0,
np.eye(2, 4)
#>>>
array([[1., 0., 0., 0.],
[0., 1., 0., 0.]])
np.eye(4, 2)
#>>>
array([[1., 0.],
[0., 1.],
[0., 0.],
[0., 0.]])
4. 總結回顧
本篇介紹了numpy中最重要的概念--陣列的相關知識,
包括陣列的資料型別,主要是各種數值型別,
以及各類常用的創建方式(zeros,ones,linspace,random,eye),
這些雖然簡單,卻是后續學習各種陣列操作的基礎,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555492.html
標籤:其他
上一篇:【Java學習】 Spring的基礎理解 IOC、AOP以及事務
下一篇:返回列表
