初識(shí)python的numpy模塊
Numpy是Numerical Python extensions的縮寫(xiě),字面意思是Python數(shù)值計(jì)算擴(kuò)展。Numpy是python中眾多機(jī)器學(xué)習(xí)庫(kù)的依賴(lài),這些庫(kù)通過(guò)Numpy實(shí)現(xiàn)基本的矩陣計(jì)算。
Numpy支持高階、大量計(jì)算的矩陣、向量計(jì)算,與此同時(shí)還提供了較為豐富的函數(shù)。此外,Numpy基于更加現(xiàn)代化的編程語(yǔ)言--python,python憑借著開(kāi)源、免費(fèi)、靈活性、簡(jiǎn)單易學(xué)、工程特性好等特點(diǎn)風(fēng)靡技術(shù)圈,已經(jīng)成為機(jī)器學(xué)習(xí)、數(shù)據(jù)分析等領(lǐng)域的主流編程語(yǔ)言。
本文主要帶大家粗略的學(xué)習(xí)python的numpy模塊??!
一、array類(lèi)型
numpy的array類(lèi)型是該庫(kù)的一個(gè)基本數(shù)據(jù)類(lèi)型,這個(gè)數(shù)據(jù)類(lèi)型從字面上看是數(shù)組的意思,也就意味著它最關(guān)鍵的屬性是元素與維度,我們可以用這個(gè)數(shù)據(jù)類(lèi)型來(lái)實(shí)現(xiàn)多維數(shù)組。
因此,通過(guò)這個(gè)數(shù)據(jù)類(lèi)型,我們可以使用一維數(shù)組來(lái)表示向量,二維數(shù)組表示矩陣,并以此類(lèi)推以用來(lái)表示更高維度的張量。
1.1array類(lèi)型的基本使用
import numpy as np # 通過(guò)np.array()方法創(chuàng)建一個(gè)名為array的array類(lèi)型,參數(shù)是一個(gè)list array = np.array([1, 2, 3, 4]) print(array) # 結(jié)果為:[1 2 3 4] # 獲取array中元素的最大值 print(array.max()) # 結(jié)果為:4 # 獲取array中元素的最小值 print(array.min()) # 結(jié)果為:1 # 獲取array中元素的平均值 print(array.mean()) # 結(jié)果為:2.5 # 直接將array乘以2,python將每個(gè)元素都乘以2 print(array*2) # 結(jié)果為:[2 4 6 8] print(array+1) # 結(jié)果為:[2 3 4 5] print(array/2) # 結(jié)果為:[0.5 1. 1.5 2. ] # 將每一個(gè)元素都除以2,得到浮點(diǎn)數(shù)表示的結(jié)果 print(array % 2) # 結(jié)果為:[1 0 1 0] array_1 = np.array([1, 0, 2, 0]) # 獲取該組數(shù)據(jù)中元素值最大的那個(gè)數(shù)據(jù)的首個(gè)索引,下標(biāo)從0開(kāi)始 print(array_1.argmax()) # 結(jié)果為:2
通過(guò)上面的代碼,我們可以了解到Numpy中array類(lèi)型的基本使用方法。
我們可以看到,array其實(shí)是一個(gè)類(lèi),通過(guò)傳入一個(gè)list參數(shù)來(lái)實(shí)例化為一個(gè)對(duì)象,從而實(shí)現(xiàn)了對(duì)數(shù)據(jù)的封裝。
1.2對(duì)更高維度數(shù)據(jù)的處理
import numpy as np # 創(chuàng)建一個(gè)二維數(shù)組,用以表示一個(gè)3行2列的矩陣 array = np.array([[1, 2], [3, 4], [5, 6]]) print(array) # 查看數(shù)據(jù)的維度屬性,下面輸出結(jié)果(3,2)表示3行2列 print(array.shape) # 結(jié)果為:(3, 2) # 查看元素個(gè)數(shù) print(array.size) # 結(jié)果為:6 # 查看元素最大值的索引 print(array.argmax()) # 結(jié)果為:5 # 將shape為(3,2)的array轉(zhuǎn)換為一行表示 print(array.flatten()) # 結(jié)果為:[1 2 3 4 5 6] # 我們可以看到,flatten()方法是將多維數(shù)據(jù)“壓平”為一維數(shù)組的過(guò)程 #將array數(shù)據(jù)從shape為(3,2)的形式轉(zhuǎn)為(2,3)的形式 print(array.reshape(2, 3)) '''結(jié)果為: [[1 2 3] [4 5 6]]''' #將array數(shù)據(jù)從shape為(3,2)的形式轉(zhuǎn)為(1,6)的形式 print(array.reshape(1, 6)) # 結(jié)果為:[[1 2 3 4 5 6]]
高級(jí)一點(diǎn)的就是flatten()和reshape()函數(shù)了,需要注意下reshape()返回的結(jié)果是array類(lèi)型
1.3Numpy創(chuàng)建特殊類(lèi)型的array類(lèi)型
1.3.1生成全為0或全為1的array
import numpy as np # 生成所有元素為 array_zeros = np.zeros((2, 3, 3)) print(array_zeros) '''結(jié)果為: [[[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]] [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]] ''' array_ones = np.ones((2, 3, 3)) print(array_ones) '''結(jié)果為: [[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]]] ''' print(array_ones.shape) # 結(jié)果為:(2, 3, 3)
注意:如果將(2,3,3)改為(3,3)
array_zeros = np.zeros((3, 3))print(array_zeros)'''結(jié)果為:[[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]'''其生成的是3行3列的array
1.3.2np.arrange()和np.linspace()
arange([start,] stop[, step,], dtype=None, , like=None)
返回給定間隔內(nèi)均勻分布的值。值在半開(kāi)區(qū)間``[start, stop)``(換句話(huà)說(shuō),包括`start`但不包括`stop`的區(qū)間)內(nèi)生成。對(duì)于整數(shù)參數(shù),該函數(shù)等效于 Python 內(nèi)置的 `range` 函數(shù),但返回的是 ndarray 而不是列表。當(dāng)使用非整數(shù)步長(zhǎng)(例如 0.1)時(shí),結(jié)果通常會(huì)不一致。對(duì)于這些情況,最好使用 `numpy.linspace`。
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
在指定的時(shí)間間隔內(nèi)返回均勻分布的數(shù)字。返回“num”個(gè)均勻分布的樣本,在區(qū)間 [`start`, `stop`] 上計(jì)算。
start:序列的起始值。
stop:序列的結(jié)束值,除非 `endpoint` 設(shè)置為 False。在這種情況下,序列由除最后一個(gè)“num + 1”個(gè)均勻分布的樣本之外的所有樣本組成,因此排除了“stop”。請(qǐng)注意,當(dāng) `endpoint` 為 False 時(shí),步長(zhǎng)會(huì)發(fā)生變化。
num=50:要生成的樣本數(shù)。默認(rèn)值為 50。必須為非負(fù)數(shù)。
endpoint=True:如果為真,`stop` 是最后一個(gè)樣本。否則,不包括在內(nèi)。默認(rèn)為真。
retstep=False:如果為 True,則返回 (`samples`, `step`),其中 `step` 是樣本之間的間距。
dtype=None:輸出數(shù)組的類(lèi)型。如果 `dtype` 沒(méi)有給出,數(shù)據(jù)類(lèi)型是從 `start` 和 `stop` 推斷出來(lái)的。推斷的 dtype 永遠(yuǎn)不會(huì)是整數(shù);即使參數(shù)會(huì)產(chǎn)生一個(gè)整數(shù)數(shù)組,也會(huì)選擇`float`。
因此以下代碼就很容易理解了
# 生成一個(gè)array,從0遞增到10,步長(zhǎng)為1 array_arange = np.arange(10) print(array_arange) # 結(jié)果為:[0 1 2 3 4 5 6 7 8 9] # 生成一個(gè)array,從0遞增到10,步長(zhǎng)為2 array_arange_1 = np.arange(0, 10, 2) print(array_arange_1) # 結(jié)果為:[0 2 4 6 8] # 生成一個(gè)array,將0-10等分為5部分 array_linspace = np.linspace(0, 10, 5) print(array_linspace) # 結(jié)果為:[ 0. 2.5 5. 7.5 10. ]
1.4Numpy基礎(chǔ)計(jì)算演示
import numpy as np # 取絕對(duì)值 print(np.abs([1, -2, 3, -4])) # [1 2 3 4] # 求正弦值 print(np.sin(np.pi/2)) # 1.0 # 求反正切值 print(np.arctan(1)) # 0.7853981633974483 # 求e的2次方 print(np.exp(2)) # 7.38905609893065 # 求2的三次方 print(np.power(2, 3)) # 8 # 求向量[1,2]與[3,4]的點(diǎn)積 print(np.dot([1, 2], [3, 4])) # 11 # 求開(kāi)方 print(np.sqrt(4)) # 2.0 # 求和 print(np.sum([1, 2, 3, 4])) # 10 # 求平均值 print(np.mean([1, 2, 3, 4])) #2.5 # 求標(biāo)準(zhǔn)差 print(np.std([1, 2, 3, 4])) # 1.118033988749895
二、線(xiàn)性代數(shù)相關(guān)
前面我們已經(jīng)了解到array類(lèi)型及其基本操作方法,了解array類(lèi)型可以表示向量、矩陣和多維張量。
線(xiàn)性代數(shù)計(jì)算在科學(xué)計(jì)算領(lǐng)域中非常重要,因此接下來(lái)了解以下Numpy提供的線(xiàn)性代數(shù)操作
import numpy as np vector_a = np.array([1, 2, 3]) vector_b = np.array([2, 3, 4]) # 定義兩入向量vector_a與vector_b m = np.dot(vector_a, vector_b) # 將兩個(gè)向量相乘,在這里也就是點(diǎn)乘,結(jié)果為20 print(m) n = vector_a.dot(vector_b) print(n) # 將vector_a與vector_b相乘,結(jié)果為20 o = np.dot(vector_a, vector_b.T) print(o) ''' 將一個(gè)行向量與一個(gè)列向量叉乘的結(jié)果相當(dāng)于將兩個(gè)行向量求點(diǎn)積,這里測(cè)試了dot()方法。其中array類(lèi)型的T()方法表示轉(zhuǎn)置。 測(cè)試結(jié)果表明: dot()方法默認(rèn)對(duì)兩個(gè)向量求點(diǎn)積。對(duì)于符合叉乘格式的矩陣,自動(dòng)進(jìn)行又乘。''' # 我們看一下下面這個(gè)例子: matrix_a = np.array([[1, 2], [3, 4]]) # 定義一個(gè)2行2列的方陣 matrix_b = np.dot (matrix_a, matrix_a.T) # 這里將該方陣與其轉(zhuǎn)置叉乘,將結(jié)果賦予matrix_b變量 print(matrix_b) '''結(jié)果為: array([[5,11], [11,25]])''' p = np.linalg.norm([1, 2]) print(p) # 求一個(gè)向量的范數(shù)的值,結(jié)果為2.2360679774997898 # 如果norm()方法沒(méi)有指定第2個(gè)參數(shù),則默認(rèn)為求2范數(shù) np.linalg.norm([1, -2], 1) # 指定第2個(gè)參數(shù)值為1,即求1范數(shù)。我們?cè)谇懊娼榻B過(guò),1范數(shù)的結(jié)果為向量中各元素絕對(duì)值之和,結(jié)果為3.0 q = np.linalg.norm([1, 2, 3, 4], np. inf) print(q) # 求向量的無(wú)窮范數(shù),其中np.inf表示正無(wú)窮,也就是向量中元素值最大的那個(gè),其結(jié)果為4.0 r = np.linalg .norm([1, 2, 3, 4], -np.inf) print(r) # 同理,求負(fù)無(wú)窮范數(shù)的結(jié)果為1, 也就是向量中元素的最小值 # 求行列式 s = np.linalg.det(matrix_a) print(s) # -2.0000000000000004 t = np.trace(matrix_a) print(t) # 求矩陣matrix_a的跡,結(jié)果為5 u = np.linalg.matrix_rank(matrix_a) # 求矩陣的秩,結(jié)果為2 print(u) v = vector_a * vector_b # 使用*符號(hào)將兩個(gè)向量相乘,是將兩個(gè)向量中的元素分別相乘,也就是我們所講到的哈達(dá)馬乘積 print(v) # [ 2 6 12] w = vector_a ** vector_b print(w) # 使用二元運(yùn)算符**對(duì)兩個(gè)向量進(jìn)行操作,結(jié)果為array([1, 8, 81],dtype = int32) # 表示將向量vector. a中元素對(duì)應(yīng)vector. b中的元素值求冪運(yùn)算。例如最終結(jié)果[1,8,81]可以表示為[1*1,2*2*2,3*3*3*3] # 求逆矩陣 z = np.linalg.inv(matrix_a) print(z) ''' [[-2. 1. ] [ 1.5 -0.5]]'''
三、矩陣的高級(jí)函數(shù)-隨機(jī)數(shù)矩陣
Numpy除了為我們提供常規(guī)的數(shù)學(xué)計(jì)算函數(shù)和矩陣相關(guān)操作之外,還提供很多功能豐富的模塊,隨機(jī)數(shù)模塊就是其中一部分。
利用隨機(jī)數(shù)模塊可以生成隨機(jī)數(shù)矩陣,比python自帶的隨機(jī)數(shù)模塊功能還要強(qiáng)大。
import numpy as np # 設(shè)置隨機(jī)數(shù)種子 np.random.seed() # 從[1,3)中生成一個(gè)整型的隨機(jī)數(shù),連續(xù)生成10個(gè) a = np.random.randint(1, 3, 10) print(a) # [1 1 1 2 1 1 1 1 2 2] # 若要連續(xù)產(chǎn)生[1,3}之間的浮點(diǎn)數(shù),可以使用以下方法: # ① b = 2*np.random.random(10)+1 print(b) ''' [2.88458839 2.07004167 2.80814156 1.83247535 2.33649809 2.62763357 2.0549351 2.33464915 1.70562208 2.66257726]''' # ② c = np.random.uniform(1, 3, 10) print(c) ''' [1.76967412 1.37703868 2.48838004 1.45986254 2.04487418 2.51107658 1.25673115 1.31416097 2.56218317 2.90575438]''' # 生成一個(gè)滿(mǎn)足正態(tài)分布(高斯分布)的矩陣,其維度是4*4 d = np. random.normal(size=(4, 4)) print(d) ''' [[ 0.76164366 0.11588368 0.49221559 -0.28222691] [ 0.47638143 -0.21197541 -1.0776362 0.49241666] [ 0.26038756 -0.20406522 1.11210954 -1.191425 ] [ 0.58255677 1.84047863 -0.21366512 -0.85425828]]''' # 隨機(jī)產(chǎn)生10個(gè)n=5、p=0.5的二項(xiàng)分布數(shù)據(jù): e = np.random.binomial(n=5, p=0.5, size=10) print(e) # [1 1 5 2 1 2 1 2 1 2] # 產(chǎn)生一個(gè)0到9的序列 data = np.arange(10) print(data) # [0 1 2 3 4 5 6 7 8 9] # 從data數(shù)據(jù)中隨機(jī)采集5個(gè)樣本,采集過(guò)程是有放回的 f = np.random.choice(data, 5) print(f) # [1 7 3 3 4] # 從data數(shù)據(jù)中隨機(jī)采集5個(gè)樣本,采集過(guò)程是沒(méi)有放回的 g = np.random.choice(data, 5, replace=False) print(g) # [8 9 1 5 0] # 對(duì)data進(jìn)行亂序 h = np.random.permutation(data) print(h) # [8 5 3 9 2 0 4 6 1 7] # 對(duì)data進(jìn)行亂序,并替換為新的data np.random.shuffle(data) print(data) # [9 7 0 3 8 5 2 1 4 6]
四、總結(jié)
到此這篇關(guān)于初識(shí)python的numpy模塊的文章就介紹到這了,更多相關(guān)python numpy模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用numpy模塊創(chuàng)建數(shù)組操作示例
- Python numpy 模塊介紹
- Python基于numpy模塊實(shí)現(xiàn)回歸預(yù)測(cè)
- Python使用Numpy模塊讀取文件并繪制圖片
- Python使用numpy模塊實(shí)現(xiàn)矩陣和列表的連接操作方法
- Python3.5基礎(chǔ)之NumPy模塊的使用圖文與實(shí)例詳解
- Python中numpy模塊常見(jiàn)用法demo實(shí)例小結(jié)
- python的numpy模塊安裝不成功簡(jiǎn)單解決方法總結(jié)
- Python創(chuàng)建對(duì)稱(chēng)矩陣的方法示例【基于numpy模塊】
- Python中的numpy數(shù)組模塊
相關(guān)文章
python tkinter中的錨點(diǎn)(anchor)問(wèn)題及處理
這篇文章主要介紹了python tkinter中的錨點(diǎn)(anchor)問(wèn)題及處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法
在現(xiàn)代計(jì)算任務(wù)中,尤其是處理大量數(shù)據(jù)或計(jì)算密集型任務(wù)時(shí),使用并行處理可以顯著提升程序性能,Python的multiprocessing模塊提供了創(chuàng)建進(jìn)程池的功能,通過(guò)預(yù)先創(chuàng)建的進(jìn)程來(lái)并發(fā)執(zhí)行任務(wù),避免了頻繁的進(jìn)程創(chuàng)建和銷(xiāo)毀,感興趣的朋友一起看看吧2024-10-10
python讀取當(dāng)前目錄下的CSV文件數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了python讀取當(dāng)前目錄下的CSV文件數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
Python設(shè)置默認(rèn)編碼為utf8的方法
這篇文章主要介紹了Python設(shè)置默認(rèn)編碼為utf8的方法,結(jié)合實(shí)例形式分析了Python針對(duì)文件編碼的設(shè)置方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-07-07
PyTorch CNN實(shí)戰(zhàn)之MNIST手寫(xiě)數(shù)字識(shí)別示例
本篇文章主要介紹了PyTorch CNN實(shí)戰(zhàn)之MNIST手寫(xiě)數(shù)字識(shí)別示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
python環(huán)境配置方式(服務(wù)器+本地)
這篇文章詳細(xì)介紹了在服務(wù)器上安裝和配置Anaconda3、TensorFlow、PyTorch等深度學(xué)習(xí)環(huán)境的步驟,包括下載、初始化、創(chuàng)建環(huán)境、驗(yàn)證安裝以及解決一些常見(jiàn)問(wèn)題2025-01-01
Matplotlib之解決plt.savefig()保存多張圖片有重疊的問(wèn)題
這篇文章主要介紹了Matplotlib之解決plt.savefig()保存多張圖片有重疊的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-09-09
Python3.10動(dòng)態(tài)修改Windows系統(tǒng)本地IP地址
這篇文章主要介紹了Python3.10動(dòng)態(tài)修改Windows系統(tǒng)本地IP地址,需要的朋友可以參考下2023-05-05
解析Anaconda創(chuàng)建python虛擬環(huán)境的問(wèn)題
這篇文章主要介紹了Anaconda創(chuàng)建python虛擬環(huán)境,包括虛擬環(huán)境管理、虛擬環(huán)境中python包管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
python實(shí)現(xiàn)斐波那契數(shù)列的方法示例
每個(gè)碼農(nóng)大概都會(huì)用自己擅長(zhǎng)的語(yǔ)言寫(xiě)出一個(gè)斐波那契數(shù)列出來(lái),斐波那契數(shù)列簡(jiǎn)單地說(shuō),起始兩項(xiàng)為0和1,此后的項(xiàng)分別為它的前兩項(xiàng)之后。下面這篇文章就給大家詳細(xì)介紹了python實(shí)現(xiàn)斐波那契數(shù)列的方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2017-01-01

