機器學(xué)習(xí)中numpy的經(jīng)典必用一份腳本足夠!!_第1頁
機器學(xué)習(xí)中numpy的經(jīng)典必用一份腳本足夠!!_第2頁
機器學(xué)習(xí)中numpy的經(jīng)典必用一份腳本足夠!!_第3頁
機器學(xué)習(xí)中numpy的經(jīng)典必用一份腳本足夠!!_第4頁
機器學(xué)習(xí)中numpy的經(jīng)典必用一份腳本足夠!!_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、# 機器學(xué)習(xí)中numpy的經(jīng)典必用# Scipy 是一個用于數(shù)學(xué)、科學(xué)、工程領(lǐng)域的常用軟件包,# 可以處理插值、積分、優(yōu)化、圖像處理、常微分方程數(shù)值解的求解、# 信號處理等問題。它用于有效計算Numpy矩陣,使Numpy和Scipy協(xié)同工作,高效解 決問題。# 1# Load Library import numpy as np from scipy import sparse# 將向量創(chuàng)建為行vector_row = np.array( 1,# 將向量創(chuàng)建為列vector_column = np.array(# Numpy 中創(chuàng)建一個二維數(shù)組,# Create a Matrixmatrix

2、= np.array( 1, 2, print("二維矩陣 matrix: "2, 3)1, 2, 3)并將其稱為矩陣,它包含2行3列3, 4, 5, 6) .format(matrix)# 2# 創(chuàng)建稀疏矩陣(sparse Matrix )# 顯示非零元素的位置matrix_1 = np.array( 0, 0, 0, 1, 3, 0)print("二維含零元素的矩陣matrix_1 : " .format(matrix_1)matrix_1_sparse = sparse.csr_matrix(matrix_1)print("二維矩陣的稀疏

3、矩陣:" .format(matrix_1_sparse)# 3# 描述矩陣# Create a Matrixmatrix = np.array( 1, 2, 3, 4, 5, 6, 7, 8, 9)# View the Number of Rows and Columnsprint("矩陣的屬性行列數(shù):" .format(matrix.shape)# View the number of elements (rows*columns)print("矩陣的元素個數(shù) size: " .format(matrix.size)# View the n

4、umber of Dimensions(2 in this case)print("矩陣的維度 ndim: " .format(matrix.ndim)# 3# 使用函數(shù)操作矩陣元素# 建立一個加100的函數(shù)def add_100(i):i = i + 100 return i# 把函數(shù)轉(zhuǎn)化為矢量函數(shù)(vectorized function ) vectorized_add_100 = np.vectorize(add_100)# 讓函數(shù)祚用血矩陣的所有元素一print("讓函數(shù)加 100 作用于矩陣 matrix: " .format(vectoriz

5、ed_add_100(matrix)一 一# 4# 矩陣的大小print("矩陣元素的最大值:" .format(np.max(matrix)print("返回元素的最小值:" .format(np.min(matrix)print("找到矩陣每列的最大值:" .format(np.max(matrix, axis=0)print("找到每一行元素的最大值:" .format(np.max(matrix, axis=1)# 二維矩陣的均值,方差和標(biāo)準(zhǔn)方差print( "矩陣 matrix 的均值: &qu

6、ot; .format(np.mean(matrix)print("矩陣 matrix 的方差:" .format(np.std(matrix)print( "矩陣 matrix 標(biāo)準(zhǔn)方差: " .format(np.var(matrix)# 5# 數(shù)組的重塑print("矩陣轉(zhuǎn)換一列:" .format(matrix.reshape( 9, 1)# 這里-1表示盡可能多的列print("矩陣轉(zhuǎn)換為一行的二維數(shù)組:" .format(matrix.reshape( 1, -1 )# 如果我們在reshape的參數(shù)上

7、只放了一個參數(shù),說明我們要返回的是一行n列的數(shù)組print("矩陣轉(zhuǎn)換為一行序列的表示方法:" .format(matrix.reshape( 9)# 6# 矩陣的轉(zhuǎn)置print("矩陣 matrix 的轉(zhuǎn)置:" .format(matrix.T)# 矩陣的秩# 矩陣的行列式print("matrix的行列式:" .format(np.linalg.det(matrix)# 計算矩陣的秩print("matrix的秩:" .format(np.linalg.matrix_rank(matrix)# 矩陣的對角線pr

8、int("矩陣的主對角線:" .format(matrix.diagonal()# 可以使用偏移來查看它的次對角線,正數(shù)表示右移,負(fù)數(shù)表示左移:print("矩陣的:".format(matrix.diagonal(offset=1)# 可以使用偏移來查看它的次對角線,正數(shù)表示右移,負(fù)數(shù)表示左移:print("矩陣的:".format(matrix.diagonal(offset=- 1)# numpy.trace 是求shape的對角線上的元素的和print( "matrix 的跡:" .format(matri

9、x.trace()# 7# 查找特征值和特征向量= np.linalg.eig(matrix)eigenvalues, eigenvectorsprint("矩陣的特征值:,矩陣的特征向量:" .format(eigenvalues, eigenvec tors)vector_1= np.array(vector_2= np.array(#計五點積print("兩個向量的點積#第二種表達(dá)方法print("兩個向量的點積# 矩陣的點積1,2,3)4,5,6)1: ".format(np.dot(vector_1,vector_2)2: "

10、;.format(vector_1vector_2)# 8# 矩陣的加減乘除matrix_2 = np.array( 7, 8, 9, 4, 5, 6, 1, 2, 3)# 加print("矩陣相加:" .format(np.add(matrix, matrix_2)# 減print( "矩陣想減: " .format(np.subtract(matrix, matrix_2)# 乘print("矩陣的乘法:" .format(matrix * matrix_2)# 9# 矩陣的逆print("矩陣的逆矩陣:" .

11、format(np.linalg.inv(matrix)# 矩陣的隨機數(shù)產(chǎn)生np.random.seed( 1 )# 產(chǎn)生3個隨機的整型數(shù)界于1,10print( "3 個隨機數(shù):" .format(np.random.randint( 0, 10, 3)# 產(chǎn)生3個隨機數(shù)滿足一個均值為1.0 ,方差為2.0的正態(tài)分布print( "3 個隨機數(shù)的正態(tài)分布:" .format(np.random.normal( 1.0 , 2.0 , 3)#numpy的基礎(chǔ)操作# 訪問列表元素,切片作用于數(shù)組import numpy as np arr = np.arr

12、ay( 2.0 , 6.0 , 5.0 , 5.0 )print(arr:3)print(arr 0)print(arr)# 1# 提取所包含的不同元素,使用unique函數(shù)arr_unique = np.unique(arr)print( "unique 提取數(shù)列中的不同元素:" .format(arr_unique)# 數(shù)組元素的排序也可以用sort()函數(shù),數(shù)組的索引用argsort() 函數(shù) arr_sort = np.sort(arr)print( "sort 從小到大的排序:" .format(arr_sort)arr_sort_index

13、= np.argsort(arr)print( "argsort 進(jìn)行排序的索引: ” .format(arr_sort_index)# array_equal用于對比兩個數(shù)組是否相等arr1=np.array(arr2=np.array(arr3=np.array(print( "arry_equal rr1)print( "arry_equal rr2)print( "arry_equal rr3)# 對比好像顯示只在意數(shù)值,而不在意數(shù)據(jù)類型1, 3,5,7)2, 6,5,5)3, 6,5,5, dtype=int)對比兩個數(shù)組是否相等:"

14、.format(np.array_equal(arr,a對比兩個數(shù)組是否相等:".format(np.array_equal(arr,a對比兩個數(shù)組是否相等:".format(np.array_equal(arr,a# 4# shuffle()用來打亂數(shù)組的排列,變成隨機排列# 注意這個函數(shù)不返回任何東西np.random.shuffle(arr1)print( "shuffle函數(shù)打亂 arr1 后的順序輸出:" .format(arr1)# 5# 多維數(shù)組的書寫方法:與列表的操作不同,多維列表各維度用逗號隔月 matrix_1 = np.array(

15、 4, 5, 6, 7, 8, 9, dtype =float) print("二維數(shù)組的表現(xiàn)形式:" .format(matrix_1)# 6.format(matrix_10, 0).format(matrix_11 , 2)# 多維數(shù)組的訪問print("矩陣第1行第1列的數(shù)值:matrix_10, 0= "print("矩陣第2行第3列的數(shù)值:matrix_11,2= "# 7# 多維數(shù)組的切片操作,使用冒號索引,切片仍然還是矩陣# 0:1其實指的是0一個效果,跟range 一樣,行和列的序號仍然是從0開始print(&quo

16、t;矩陣的第一行的第 1個數(shù)的切片矩陣:martrix_10, 0:1=".format(matrix_1 0, 0: 1)print("矩陣的第一行的前兩個數(shù)的切片矩陣:martrix_10, 0:2=".format(matrix_1 0, 0: 2)print("矩陣的第二行的前兩個數(shù)的切片矩陣:martrix_11,0:2=".format(matrix_1 1, 0: 2)print("矩陣的第二行的所有數(shù)的切片矩陣:martrix_11, := " .format(matrix_1 1,:)# 8# 將flatt

17、en()函數(shù)將多維數(shù)組合并成一維數(shù)組.format(arr4)arr4 = matrix_1.flatten()print("將二維矩陣 matrix_1合并成以為數(shù)組 arr4: "# 9# shape()函數(shù)查看數(shù)組對象的屬性:大小print("shape查看數(shù)組元素matrix_1的屬性大小:” .format(matrix_1.shape)# 出ype返回數(shù)組元素的類型 一一print("dtype返回數(shù)組元素martix_1的元素類型:" .format(matrix_1.dtype)# 10# len()函數(shù)返回數(shù)組的第一維的長度:

18、以為數(shù)組的元素個數(shù),二維數(shù)組的行數(shù)print( "len()返回一21數(shù)組 arr4 的長度:" .format(len(arr4)print( "len()返回二維矩陣的第一維度的長度: matrix: " .format(len(matrix_ 1)# 11# in作用于數(shù)組中是否有該元素print("in函數(shù)輸出3是不是在 arr4中:".format(3 inarr4)print("in函數(shù)輸出7是不是在 arr4中:".format(7 inarr4)# 12# reshape() 函數(shù),用于調(diào)整重塑數(shù)組

19、的結(jié)構(gòu)。6 = 2*3# 這里的2*3可不是按照python的從零開始來的喔! !matrix_2 = arr4.reshape( 3 , 2)print( "reshape函數(shù)把一個6個元素的一維序列塑造成3*2的矩陣輸出 matrix_2: " .format(matrix_2)# 13# transpose()矩陣的轉(zhuǎn)置:也就是行列交換# 同樣也可以使用Tmatrix_3= matrix_2.transpose()matrix_T= matrix_2.transpose()print( "transpose將矩陣轉(zhuǎn)置為 matrix_3: " .f

20、ormat(matrix_3)print( "transpose" T兩種轉(zhuǎn)置的方法是一樣的:" .format(np.array_equal(matrix_3, matrix_T)# 14# newaxis()函數(shù)增加維度:調(diào)整數(shù)組元素位置arr_1 = np.array( 14, 32, 13, dtype =float)print("新建數(shù)組 arr_1: ,屬性大小為:" .format(arr_1, arr_1.shape)print("newaxis增加數(shù)組維度:,屬性大小為:".format(arr_1:, n

21、p.newaxis, arr_1:, np.newaxis.shape)print("newaxis增加數(shù)組維度:,屬性大小為:".format(arr_1np.newaxis,:, arr_1np.newaxis, :.shape)# 15# concatenate()函數(shù)用于數(shù)組的操作# 取決與數(shù)組的維度,多個一維數(shù)組可以相繼連接,將要連接的多個數(shù)組置于中作為參數(shù) 輸入# 對于一維數(shù)組函數(shù)不帶任何參數(shù)就默認(rèn)為是第一個軸arr_2=np.array(arr_3=np.array(arr_4=np.array(# 對于二維數(shù)組要指定是哪條軸相連接10, 20, 30, dt

22、ype=float)31,43,54,61,dtype=float)71,41,51,40,(dtype=float) arr_concat = np.concatenate(arr_2, arr_3, arr_4)print( "concatenate函數(shù)將三個序列進(jìn)行連接:" .format(arr_concat)# 二維數(shù)組的操作,行連接就是行數(shù)增加,列連接就是列增加arr_4= np.array(arr_5= np.array(arr_concat_axis0 arr_concat_axis1 print( "concatenate31,43,54,61,

23、 1,2,3,4, dtype71,41,51,40, 7,8,9,7, dtype= np.concatenate(arr_4, arr_5), axis= np.concatenate(arr_4, arr_5), axis函數(shù)將兩個數(shù)列按曲亍或而U進(jìn)行連接:=float)=float)=0)=1)axis0= , axis1= " .format(arr_concat_axis0, arr_concat_axis1)# 16# numpy的linalg子模塊,實現(xiàn)了矩陣的多種線性代數(shù)運算。# 計算矩陣的行列式的值matrix = np.array( 74, 22, 10, 92

24、, 31, 17, 21, 22, 12, dtype =flo at)print( "矩陣 matrix: " .format(matrix)matrix_det = np.linalg.det(matrix)print("矩陣 matrix 的行列式: matrix_det: " .format(matrix_det)# 17# inv函數(shù)生成矩陣的逆矩陣inv_matrix = np.linalg.inv(matrix)print( "矩陣 matrix的逆矩陣 inv_matrix: " .format(inv_matrix)

25、inv_mul_matrix = np.dot(inv_matrix, matrix)print( "matrix的逆矩陣與 matrix 的乘積:" .format(inv_mul_matrix)# 18# 矩陣的特征值(eigenvalues )和特征向量(eigenvectors )計算方法vals, vecs = np.linalg.eig(matrix)eig = np.linalg.eig(matrix)print("矩陣 matrix 的特征值 vals: ,特征向量 vecs: " .format(vals, vecs)print(&qu

26、ot;矩陣 matrix的特征值 vals: ,特征向量 vecs: " .format(eig 0, eig 1)# 19# 統(tǒng)計學(xué)與數(shù)學(xué)函數(shù)# 數(shù)組元素統(tǒng)計信息函數(shù):聚合型運算:求和,均值,中位數(shù)和標(biāo)準(zhǔn)差arr_2 = np.random.rand( 8, 4)mean_arr = arr_2.mean()print( "arr_2的平均值 mean_arr: " .format(mean_arr)sum_arr = arr_2.sum()print( "arr_2的數(shù)據(jù)總和:" .format(sum_arr)# numpy數(shù)組創(chuàng)建imp

27、ort numpy as nparr = np.array( 2, 6, 7, 8, float) print(arr)print(type(arr)# 1# 數(shù)組轉(zhuǎn)換成列表arr = np.array( 1, 2, 3, float)arr.tolist()print(arr.tolist()print(type(arr.tolist()print(list(arr)print(type(list(arr)print(type(arr)# 2# 用現(xiàn)有數(shù)組創(chuàng)建新的對象,使用"copy"函數(shù),易錯點1 arr1 = arrprint('僅僅復(fù)制了指向同一個地址: &

28、#39; .format(arrl)arr1 = arr.copy()print('這個時候才是創(chuàng)建了對象:' .format(arrl)arr1 0 = 0print('試圖修改 arr1 的第一個值:' .format(arr1) print('再來看arr是沒有發(fā)生改變的:' .format(arr) print('說明復(fù)制成功了!,)# 3# 用同一個值來覆蓋一組原有的數(shù)組值,使用(fill( 函數(shù),用處是作為初始化# fill是個功能命令,返回值當(dāng)然是0或1 ,易錯點2arr2 = np.array( 1, 2, 3, 4, 5

29、)print(arr2.fill( 1 )print(arr2.fill( 2)print( 'fill填充的數(shù)組變化 ar' .format(arr2)# 4# 使用random隨機初始化元素數(shù)組:permutation內(nèi)的參數(shù)代表數(shù)組長度arr3 = np.random.permutation( 3)print( 'random隨機化數(shù)組 arr3: ' .format(arr3)# 使用正態(tài)分布normal()函數(shù)進(jìn)行抽樣一系列數(shù)組:均值為0,arr4 = np.random.normal( 0, 1, 5)print( 'random.norma

30、l正態(tài)分布抽樣數(shù)組 arr4: ' .format(arr4)# 5# Numpy還提供幾個創(chuàng)建二維數(shù)組(矩陣)的函數(shù)# identity()函數(shù)創(chuàng)建單位矩陣,其行列數(shù)用參數(shù)指定arr5 = np.identity( 5, dtype =float)print('identity。函數(shù)創(chuàng)建二維單位矩陣arr5: ' .format(arr5)# eye函數(shù)返回第k條對角線上元素為1的矩陣# 從后續(xù)實驗結(jié)果來看,對角線的形成是以 N、M中較小值為標(biāo)準(zhǔn)生成一個方陣的對角線,# 當(dāng)索引index取值為3時則該方陣對角線向右移動3個單位,當(dāng)索引index取值為-2 時則該方針對角線向左移動2個單位arr6 = np.eye(3, k =1 , dtype=float)print(arr6)arr6 = np.eye(3, k =0 , dtype=float)print(arr6)arr6 = np.eye(3, k =2 , dtype=float)print(arr6)# (3)創(chuàng)建新數(shù)組(1或2維)最常用的函數(shù)是zeros和ones,它們按照指定的維度創(chuàng)建數(shù)組,并用0或1填充arr7 = np.o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論