日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python学习日志】 - Numpy包

發布時間:2023/12/10 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python学习日志】 - Numpy包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NumPy是什么?

使用Python進行科學計算的基礎包,在數據分析的時候比較常用到矩陣計算。這時太多的Np屬性不記得,所以方便自己使用把一些常用的Np屬性匯總記錄一下使用的時候方便查找。

ndarray.ndim
陣列的軸數(尺寸)。
ndarray.shape
數組的大小。這是一個整數元組,表示每個維度中數組的大小。對于具有n行和m列的矩陣,shape將是(n,m)。shape因此,元組的長度 是軸的數量ndim。
ndarray.size
數組的元素總數。這相當于元素的乘積shape。
ndarray.dtype
描述數組中元素類型的對象。可以使用標準Python類型創建或指定dtype。此外,NumPy還提供自己的類型。numpy.int32,numpy.int16和numpy.float64就是一些例子。
ndarray.itemsize
數組中每個元素的大小(以字節為單位)。例如,類型的元素數組float64有itemsize8(= 64/8),而其中一個類型complex32有itemsize4(= 32/8)。它相當于ndarray.dtype.itemsize。
ndarray.data
包含數組實際元素的緩沖區。通常,我們不需要使用此屬性,因為我們將使用索引工具訪問數組中的元素

?

?

雜亂的知識?

查看一個函數的幫助文檔,可以直接在文件里輸入代碼:? help(np.add)

或者在命令行中輸入:np.info(np.add)

查看包的版本號信息,可以直接輸出:? ? np.__version__

用zero函數創建數組,默認單元大小是八個字節(也就是默認double?)

import numpy as np A = np.zeros(4) print(A.itemsize) print(A.itemsize*A.size)輸出: 8 32

注意數組起始下標是從0開始的。

關于arange和reshape函數:

import numpy as np A = np.arange(8).reshape(2,4) print(A)輸出: [[0 1 2 3][4 5 6 7]]

關于返回非零元素的下標的一系列騷操作:

import numpy as np A = np.arange(8).reshape(2,4) A=A+1 A[0][1]=0 print(A) print(np.nonzero(A))輸出: [[1 0 3 4][5 6 7 8]] (array([0, 0, 0, 1, 1, 1, 1], dtype=int64), array([0, 2, 3, 0, 1, 2, 3], dtype=int64))

?其中返回的兩個參數,一個是第一維的下標,一個是第二維的下標。

關于eye函數,random函數,以及變量性質的測試

B = np.eye(2) print(B) print(B.size) print(B[0][1]) B=np.random.random((3,2)) print(B) B="hello" print(B)輸出: [[1. 0.][0. 1.]] 4 0.0 [[0.29490288 0.14067274][0.96161076 0.92929841][0.26694438 0.40938209]] hello

由此可見,相同都變量名是可以在不同時刻代替不同東西的。

但是不能對這個變量的其中一部分進行代替操作:(下面的函數中,只運行前兩行是沒有問題的)

程序1: qqweqeqweqq = np.zeros(12) for i in range(10):qqweqeqweqq[i]=np.zeros(12)Error: ValueError: setting an array element with a sequence. ---------------------------------------------------------------------------------- 程序2: qqweqeqweqq = np.zeros((10,2)) for i in range(10):qqweqeqweqq[i]=np.zeros(12)Error: ValueError: could not broadcast input array from shape (12) into shape (2)

但是這樣是沒有問題的:

qqweqeqweqq = np.zeros((10,2)) qqweqeqweqq = np.zeros(12)

疑問:sequence,array,list,dic,都有啥區別??

sum函數,max函數,min函數,mean函數

B=np.random.random((3,2)) print(B) print(B.max(),B.min(),B.mean())輸出: [[0.89882712 0.77860196][0.7093924 0.15120126][0.99924821 0.91765126]] 0.9992482107724574 0.15120126168466463 0.7424870345505307

?對應的,可以添加參數axis=0代表在第0維上進行合并

進一步體驗random函數

np1.random.rand(0-1之間的的隨機數生成)\randn(服從正態分布的隨機數生成)\randint(隨機整數的生成)\choice([])(隨機數產生的范圍自定義)\......(其他隨機數類型),舉例如下:(圖片源自鏈接)

體驗索引下標區別:

B=np.arange(25).reshape((5,5)) print(B) print(B[1:-1,1:-1]) print(B[1:-1]) print(B[1:-1][1:-1])輸出: [[ 0 1 2 3 4][ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19][20 21 22 23 24]] [[ 6 7 8][11 12 13][16 17 18]] [[ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19]]

int,float,str之間的類型轉換:

num2 = "123";num2 = int(num1);print("num2: %d" % num2);'''輸出 num2: 123'''num1 = "123.12";num2 = float(num1);print("num2: %f" % num2);'''num2: 123.120000'''num = 123;mystr = str(num);print ("%s" % mystr);''' 輸出 123 '''

其他小測試:(關于numpy的sum函數)

range(2,4) Out[141]: range(2, 4)np.sum(range(4)) Out[142]: 6qqqq=range(4)qqqq Out[144]: range(0, 4)type(qqqq) Out[145]: rangenp.sum(range(10,12)) Out[146]: 21

?

numpy包中,還有一個非常實用的玩意:矩陣操作。

創建一個矩陣,可以使用函數np,mat(...),參數可以是一個list或者是一個narray。

你想構建一個2*3的全1矩陣,則只需要:

A=np.mat(np.ones(6).reshape(2,3))

即可。

現在假設A是個矩陣,那么:

求矩陣的逆:A.I? ? ? ? ?或者:np.linalg.inv(A)

求矩陣的轉置:A.T? ? ?或者:? A.linalg.transpose()

求矩陣的行列式:np.linalg.det(A)

求矩陣的特征值和特征向量:np.linalg.eig(np1)

矩陣的點乘:np.linalg.dot(A,B)

求線性方程組的解:
首先寫出方程組的右邊的y值向量:y=np.array([[y1],[y2],[y3]...])
函數值的集合等于 x=np.linalg.solve(A,y)

?

但是要注意np.mat()和np.matrix()的區別:后者是完全復制,前者是當參數是矩陣的時候是直接引用的。

關于數據保存

?

Numpy提供了幾種數據保存的方法。

? ?以3*4數組a為例:

? ? 1. a.tofile("filename.bin")

? ? ? 這種方法只能保存為二進制文件,且不能保存當前數據的行列信息,文件后綴不一定非要是bin,也可以為txt,但不影響保存格式,都是二進制。

? ? ? 這種保存方法對數據讀取有要求,需要手動指定讀出來的數據的的dtype,如果指定的格式與保存時的不一致,則讀出來的就是錯誤的數據。

? ? ? ?b = numpy.fromfile("filename.bin",dtype = **)

? ? ? ?讀出來的數據是一維數組,需要利用

? ? ? ? b.shape = 3,4重新指定維數。

? ? 2.numpy.save("filename.npy",a)

? ? ? ?利用這種方法,保存文件的后綴名字一定會被置為.npy,這種格式最好只用

? ? ? ?numpy.load("filename")來讀取。

? ?3.numpy.savetxt("filename.txt",a)

? ? ? b = ?numpy.loadtxt("filename.txt")

? ? ?用于處理一維和二維數組

?

兩個數組的拼接:

np.concatenate((list1,list2),axis=0):矩陣之間的拼接

axis=0,代表在行方向上拼接(豎著接到后面)

axis=1,代表在列方向上拼接(橫著接到后面)

總結

以上是生活随笔為你收集整理的【Python学习日志】 - Numpy包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。