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

歡迎訪問 生活随笔!

生活随笔

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

python

python之numpy

發布時間:2023/11/29 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之numpy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

numpy是一個多維的數組對象,類似python的列表,但是數組對象的每個元素之間由空格隔開。

?

一、數組的創建

1.通過numpy的array(參數),參數可以是列表、元組、數組、生成器等

由arr2和arr3看出,對于多維數組來說,如果最里層的數據類型不一致,array()會將其轉化為一致

由arr2和arr4看出,對于最里層的數據個數不一致,array()的結果只是一個一維數組。

import numpy as np arr1 = np.array(range(10)) arr2 = np.array([[1,2,3],[4,5,6]]) arr3 = np.array([[1,2,3],['a','b','c']]) arr4 = np.array([[1,2,3],['a','b']]) print(arr1) print(arr2) print(arr3) print(arr4) array()創建數組

2.通過numpy的arange(start,stop,step=1,dtype)創建一維數組

start表示起始值,stop表示終止值(包含start但不包含stop,即前閉后開區間),step表示步長默認為1,dtype表示元素類型,其中stop和step可省略。

arr5 = np.arange(5) #[0 1 2 3 4] arr6 = np.arange(1.0,6) #[1. 2. 3. 4. 5. ] arr7 = np.arange(1.0,6,dtype = int) #[1 2 3 4 5] arr8 = np.arange(1,8,2) #[1 3 5 7]

?

3.通過reshape(m,n)創建

如下示例表示創建10個0-1之間的隨機數,然后生成一個二維數組,每個數組5個元素。

arr = np.random.rand(10).reshape(2,5) print(arr) # [[0.03377643 0.17232537 0.55157918 0.96107258 0.50468264] # [0.85299258 0.50271173 0.31466024 0.89302 0.82547851]]

?

4.通過linspace(start,?stop,?num=50,?endpoint=True,?retstep=False,?dtype=None)創建一維數組

start:起始值

stop:終止值,默認包含stop

num:數組元素的個數,默認為50個

endpoint:數組是否包含stop,默認為true包含,false表示不包含

retstep:數組是否顯示步長,默認為false不顯示,只顯示數組;true表示結果顯示為一個元組,元組的第一個元素為數組第二個元素為步長

dtype:數組元素的類型

arr1 = np.linspace(1,5,num=5) #[1. 2. 3. 4. 5.] arr2 = np.linspace(1,6,num=5,endpoint=False,retstep=True,dtype=int) #(array([1, 2, 3, 4, 5]), 1.0)

?

5.通過zeros(shape,dtype=float)和zeros_like(arr,dtype)創建元素全部為0的多維數組?

zeros()表示創建一個數組,緯度為參數shape,元素全部為0且默認類型為float

zeros_like()表示創建一個類似參數arr結構的數組,元素全部為0,元素類型默認與arr保持一致,也可自定義元素類型。

arr1 = np.zeros(3) arr2 = np.zeros([3,2],dtype = int) arr3 = np.zeros_like(arr1,dtype = int) print(arr1) print(arr2) print(arr3) # [0. 0. 0.] # [[0 0] # [0 0] # [0 0]] # [0 0 0] zeros()和zeros_like()創建數組

?

6.通過ones(shape,dtype=float)和ones_like(arr,dtype)創建元素全部為1的多維數組?

ones()和ones_like()的用法類似zeros()和zeros_like()的用法,只是數組的元素的值為1。

arr1 = np.ones(2) arr2 = np.ones((2,3),dtype = int) arr3 = np.ones_like(arr1,dtype = int) print(arr1) print(arr2) print(arr3) # [1. 1.] # [[1 1 1] # [1 1 1]] # [1 1] ones()和ones_like()創建數組

?

7.通過eye(n,dtype = float)創建多維數組?

eye()表示創建n*n的數組,對角線元素為1其他元素為0,默認元素類型為float。

arr1 = np.eye(2) arr2 = np.eye(3,dtype = int) print(arr1) print(arr2) # [[1. 0.] # [0. 1.]] # [[1 0 0] # [0 1 0] # [0 0 1]] eye()創建數組

?

二、數組常用屬性

  • type(arr)? ?數組類型
  • arr.ndim? ? 數組的秩,即軸的數量或緯度的數量
  • arr.shape? 數組的形狀,形式為(m,n),對于二位數組來說m表示行n表示列
  • arr.size? ? ?數組元素的總個數,相當于shape中的m*n
  • arr.dtype? ?數組元素的類型
  • arr.itemsize? ?數組元素的大小,單位為字節??
  • arr.data? 實際數組元素的緩沖區
arr = np.array(([1,2,3],[4,5,6])) print(type(arr)) #<class 'numpy.ndarray'> print(arr.ndim) #2 print(arr.shape) #(2, 3) print(arr.size) #6 print(arr.dtype) #int32 print(arr.itemsize)# 4 print(arr.data) #<memory at 0x000002DADBB082D0> 數組常用屬性

?

三、數組的索引

①數值索引

數組的數值索引類似python列表和元組的索引,從0開始,且切片[m:n]表示包括m但不包括n。

對于嵌套列表和元組來說,可通過l[m][n]獲取第二層的值,在numpy中除了這種方法,還可通過arr[m,n]來獲取,m表示行n表示列。

arr = np.arange(12).reshape(2,2,3) print(arr) print(arr[0][1][1:]) print(arr[1][0][2]) print(arr[1,0,2]) # [[[ 0 1 2] # [ 3 4 5]] # # [[ 6 7 8] # [ 9 10 11]]] # [4 5] # 8 # 8 數組的數值索引

②布爾索引

使用布爾索引時,False表示不保留,True表示保留,如下例子h表示在水平方向的索引規則,即保留第二行,v表示在豎直方向的索引規則,保留第一列和第三列。

arr = np.arange(12).reshape(3,4) h = np.array([False,True,False]) v = np.array([True,False,True,False]) print(arr) print(arr[h]) print(arr[:,v]) print(arr[h,v]) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] # [[4 5 6 7]] # [[ 0 2] # [ 4 6] # [ 8 10]] # [4 6] 數組的布爾索引

?

arr = np.arange(12).reshape(2,6) m = (arr>8) n = (arr<3) print(m) print(n) print(arr[m]) print(arr[n]) # [[False False False False False False] # [False False False True True True]] # [[ True True True False False False] # [False False False False False False]] # [ 9 10 11] # [0 1 2] 數組的布爾索引2

?

四、數組常用方法

1..T轉置

.T會對原數組進行轉置操作,一維數組轉置后的結果與原數組相同。

.T會生成新的數組,修改原數組會影響轉置后的數組,修改轉置后的數組也會影響原數組,即兩者指向相同的內存地址。

arr1 = np.arange(5) print(arr1) arr2 = arr1.T print(arr2) arr1[1]=10 arr2[3]=30 print(arr1,arr2)arr3 = np.array([[1,2,3],[4,5,6]]) print(arr3) arr4 = arr3.T print(arr3) print(arr4) arr3[0][0]=10 print(arr3) print(arr4) arr4[1][0]=20 print(arr3) print(arr4) # [0 1 2 3 4] # [0 1 2 3 4] # [ 0 10 2 30 4] [ 0 10 2 30 4] # [[1 2 3] # [4 5 6]] # [[1 2 3] # [4 5 6]] # [[1 4] # [2 5] # [3 6]] # [[10 2 3] # [ 4 5 6]] # [[10 4] # [ 2 5] # [ 3 6]] # [[10 20 3] # [ 4 5 6]] # [[10 4] # [20 5] # [ 3 6]] .T轉置

?

2.reshape()重置維度

兩種用法:np.reshape(arr,shape)和arr.reshape(m,n),reshape()要求重置后的元素個數與原數組相同,否則會報錯。

reshape()兩種方法都會生成新的數組,修改原數組會影響重置維度后的數組,修改重置維度后的數組也會影響原數組,即兩者指向相同的內存地址。

arr1 = np.ones((3,2),dtype = int) print(arr1) arr2 = np.reshape(arr1,[2,3]) #xin print(arr2) arr3 = arr1.reshape(2,3) #yuan print(arr1) print(arr2) print(arr3) arr1[0][0] = 10 arr2[0][1] = 20 arr3[0][2] = 30 print(arr1) print(arr2) print(arr3) # [[1 1] # [1 1] # [1 1]] # [[1 1 1] # [1 1 1]] # [[1 1] # [1 1] # [1 1]] # [[1 1 1] # [1 1 1]] # [[1 1 1] # [1 1 1]] # [[10 20] # [30 1] # [ 1 1]] # [[10 20 30] # [ 1 1 1]] # [[10 20 30] # [ 1 1 1]] reshape()重置維度

?

3.resize()重置大小

兩種用法:np.resize(arr,shape)和arr.resize(m,n),但是resize()的效果與轉置和重置維度不同。

np.resize(arr,shape)會生成新的數組,但修改原數組不會影響重置大小后的數組,修改重置大小后的數組也不會影響原數組,即兩者是獨立的。

arr.resize(m,n)直接重置arr自身的大小,不會生成新的數組。

arr1 = np.ones((3,2),dtype = int) print(arr1) arr2 = np.resize(arr1,[2,3]) print(arr2) arr3 = arr1.resize(2,3) print(arr1) print(arr2) print(arr3) arr1[0][0] = 0 arr2[1][0] = 0 print(arr1) print(arr2) print(arr3) # [[1 1] # [1 1] # [1 1]] # [[1 1 1] # [1 1 1]] # [[1 1 1] # [1 1 1]] # [[1 1 1] # [1 1 1]] # None # [[0 1 1] # [1 1 1]] # [[1 1 1] # [0 1 1]] # None resize()重置大小

?

resize()不要求重置后的元素個數與原數組相同

如果重置大小后的數組元素個數比原數組少,會從原數組前開始部分取值,舍去多余的元素;

如果重置大小后的數組元素個數比原數組多,多的元素會再依次從原數組開始部分取值,直到元素個數滿足要求。

arr4 = np.arange(5) arr5 = np.resize(arr4,(2,2)) arr6 = np.resize(arr4,(2,4)) print(arr4) print(arr5) print(arr6) # [0 1 2 3 4] # [[0 1] # [2 3]] # [[0 1 2 3] # [4 0 1 2]] resize()重置大小:個數不一致

?

4.copy()復制

使用=給數組賦值,兩者指向相同的內存地址,修改任一個會影響另一個。

使用copy()給數組賦值,兩者是獨立的數組,修改任意個不會影響另一個。

arr1 = np.arange(5) arr2 = arr1 arr3 = arr1.copy() print(arr1,arr2,arr3) arr1[1] = 10 arr2[2] = 20 arr3[3] = 30 print(arr1,arr2,arr3) # [0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4] # [ 0 10 20 3 4] [ 0 10 20 3 4] [ 0 1 2 30 4] =和copy()賦值

?

5.astype()數據類型轉換

arr1 = np.arange(5) arr2 = arr1.astype(np.float) print(arr1,arr1.dtype) print(arr2,arr2.dtype) # [0 1 2 3 4] int32 # [0. 1. 2. 3. 4.] float64

?

6.hstack()和vstack()數組堆疊

hstack((arr1,arr2)):橫向堆疊,即在水平方向上拼接

vstack((arr1,arr2)):豎向堆疊,即在垂直方向上拼接,垂直拼接要求兩個數組橫向元素的個數相同,即shape(m,n)中的n相同

arr1 = np.arange(1,6) arr2 = np.arange(6,11) print(arr1,arr2) print(np.hstack((arr1,arr2))) print(np.vstack((arr1,arr2))) print(np.stack((arr1,arr2))) #默認axis = 0 print(np.stack((arr1,arr2),axis=1)) # [1 2 3 4 5] [ 6 7 8 9 10] # [ 1 2 3 4 5 6 7 8 9 10] # [[ 1 2 3 4 5] # [ 6 7 8 9 10]] # [[ 1 2 3 4 5] # [ 6 7 8 9 10]] # [[ 1 6] # [ 2 7] # [ 3 8] # [ 4 9] # [ 5 10]] hstack()和vstack()

?

7.hsplit()和vsplit()數組拆分

hsplit(arr , x):橫向拆分為x個,即在水平方向上拆分,水平拆分要求原數組橫向元素的個數為x的整數倍,即shape(m,n)中的n為x的整數倍

vsplit(arr , x):豎向拆分為x個,即在垂直方向上拆分,垂直拆分要求原數組垂直元素的個數為x的整數倍,即shape(m,n)中的m為x的整數倍

arr1 = np.arange(12).reshape(2,6) print(arr1) print(np.hsplit(arr1,3)) arr2 = np.arange(12).reshape(4,3) print(arr2) print(np.vsplit(arr2,2)) # [[ 0 1 2 3 4 5] # [ 6 7 8 9 10 11]] # [array([[0, 1], # [6, 7]]), array([[2, 3], # [8, 9]]), array([[ 4, 5], # [10, 11]])] # [[ 0 1 2] # [ 3 4 5] # [ 6 7 8] # [ 9 10 11]] # [array([[0, 1, 2], # [3, 4, 5]]), array([[ 6, 7, 8], # [ 9, 10, 11]])] # hsplit()和vsplit()

?

8.算數運算

①數組與單個數值進行數學運算

加、減、乘、除和冪運算都是對數組中的每一個元素進行運算。

arr = np.arange(2,12,2) print(arr) #[ 2 4 6 8 10] print(arr + 1) # 加法 [ 3 5 7 9 11] print(arr - 1) # 減法 [1 3 5 7 9] print(arr*2) # 乘法[ 4 8 12 16 20] print(arr**2) # 冪運算[ 4 16 36 64 100] print(arr/2) # 除法 [1. 2. 3. 4. 5.] print(arr.max()) # 元素中的最大值 10 print(arr.min()) # 元素中的最小值 2 print(arr.mean()) # 元素的平均值 6.0 print(arr.sum(),np.sum(arr)) # 元素的總和 30 30 print(arr.std()) # 元素的標準差 2.8284271247461903 print(arr.var()) # 元素的方差 8.0

②數組之間的數學運算

如果兩個數組緯度相同,即arr1.shape = arr2.shape,他們之間的數學運算就是每一個對應的元素進行運算,如果形狀不同,則會觸發廣播機制,具體見菜鳥教程https://www.runoob.com/numpy/numpy-broadcast.html

?

五、隨機數

1.random.normal()

生成[0,1)之間標準正態分布的隨機浮點數,無參數生成一個隨機數,有參數需要用括號括起來。

arr1 = np.random.normal() arr2 = np.random.normal(size = 2) arr3 = np.random.normal(size = (2,3)) print(arr1) print(arr2) print(arr3) # 1.1511731857477647 # [1.00477836 1.88009993] # [[ 0.44901815 -1.09567036 -0.29054339] # [-0.98372232 0.40854306 1.63187907]] random.normal()

?

2.random.rand()

生成[0,1)之間的均勻分布的隨機浮點數,無參數生成一個隨機數,有參數直接使用(m,n)即可

arr1 = np.random.rand() arr2 = np.random.rand(2) arr3 = np.random.rand(2,3) print(arr1) print(arr2) print(arr3) # 0.583667212009531 # [0.15508024 0.23161194] # [[0.11583745 0.92588869 0.69102494] # [0.49288564 0.42045576 0.42541661]] random.rand()

?

3.random.randn()

生成正態分布的隨機浮點數,大小無限制,無參數生成一個隨機數,有參數直接使用(m,n)即可

arr1 = np.random.randn() arr2 = np.random.randn(2) arr3 = np.random.randn(2,3) print(arr1) print(arr2) print(arr3) # 2.263955408625279 # [ 0.15676236 -0.15578064] # [[ 2.30273663 -0.75283754 -0.46872555] # [-1.14051476 1.51395796 -1.39675718]] random.randn()

?

4.random.randint()

使用方法random.randint(start,stop,shape,dtype)

生成的數組緯度為參數shape,緯度默認為1,

如果start和stop都存在則start<= 元素 <stop且要求start < stop,如果只傳入一個參數則0 <= 元素 < 參數

arr1 = np.random.randint(5) #生成一個隨機整數,范圍在[0,5)之間 arr2 = np.random.randint(0,10) #生成一個隨機整數,范圍在[0,10)之間 arr3 = np.random.randint(0,10,5) #生成一個包含5個元素的一維數組,元素范圍在[0,10)之間 arr4 = np.random.randint(0,10,[2,5])#生成一個2行、5列的二維數組,元素范圍在[0,10)之間 print(arr1) print(arr2) print(arr3) print(arr4) # 4 # 8 # [4 7 6 3 9] # [[4 7 4 7 1] # [2 0 8 9 3]] random.randint()

?

5.random.uniform()

使用方法random.uniform(min,max,shape),均勻生成形狀為shape、大小介于min和max之間的數組

arr1 = np.random.uniform(-5,5) arr2 = np.random.uniform(-5,5,10) arr3 = np.random.uniform(-5,5,(2,5)) print(arr1) print(arr2) print(arr3) # 1.4332287676136222 # [-3.80524427 -2.12707058 0.0591455 1.00699272 -0.18934898 -4.66894326 -1.44132482 2.80757844 -0.2869196 -4.83401471] # [[-3.01349008 -0.28137982 1.40406868 -4.71398305 -0.58511982] # [-1.62481178 3.24231459 0.10724101 -1.99657278 -2.8664592 ]] random.uniform()

?

6.random.RandomState(n)

上述幾種生成隨機數的方法,如果直接使用,即使是同一個程序,每次運行都會生成不同的隨機數。?

使用rng = np.random.RandomState(n)生成隨機數種子,再通過種子rng去調用normal()、rand()、randn()、randint()。

參數n表示使用第幾套種子,對于一個隨機數發生器,只要種子相同,生成的隨機數序列總是相同的。

?

六、寫入和讀取文件

1.save()和load()

使用方法:save('文件名',arr),load('文件名'),文件類型為.npy

save()保存的文件默認后綴名.npy,如果傳入的文件名以.npy結尾那么保存的文件名即為傳入的文件名,如果不以.npy結尾保存時會自動在文件名后加后綴.npy

由于save()保存的文件類型為npy,因此直接打開會顯示為亂碼,需要通過load()查看內容。

arr = np.random.randint(0,5,[2,5]) np.save('testNumpy.npy',arr) arr_load = np.load('testNumpy.npy') print(arr_load) # [[0 0 1 4 2] # [2 3 4 2 0]] save()和load()

?

2.savetxt()和loadtxt()

使用方法:savetxt('文件名',arr,delimiter=',',fmt='%.2f'),loadtxt('textNumpy.text',delimiter=','),其中delimiter指定txt文件中元素的分隔符,fmt指定數值保留的格式。

arr = np.random.rand(10,10) np.savetxt('textNumpy.text',arr,delimiter=',',fmt='%.2f') arr_load = np.loadtxt('textNumpy.text',delimiter=',') print(arr_load) savetxt()和loadtxt()

由于保存的文件為txt類型,因此生成的文件可以直接打開,文件內以指定的delimiter保存數據,無數組的[ ],通過loadtxt( )可讀取。

? ??

?

轉載于:https://www.cnblogs.com/Forever77/p/11187724.html

總結

以上是生活随笔為你收集整理的python之numpy的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 九色在线视频 | 国产伦精品一区二区三区视频孕妇 | www.超碰在线观看 | 国产在线不卡 | 天天干夜夜干 | 日韩在线视频免费播放 | 亚洲av色香蕉一区二区三区 | 日韩一区二区三区在线观看 | 国产精品久久久久久久久久 | 国产素人在线观看 | 毛片你懂的 | 欧美熟妇7777一区二区 | 手机在线看黄色 | 伊人三区 | 国产视频一区三区 | 老司机午夜精品 | 色综合日韩 | 伊人春色在线视频 | youjizz亚洲 | 亚洲天天做 | 深爱激情av | 国产av无码专区亚洲av毛片搜 | 欧美在线一级视频 | gv天堂gv无码男同在线观看 | 粉嫩一区二区三区 | 国产一区不卡视频 | 国产日韩欧美精品在线观看 | 伊人365影院 | 亚洲热影院 | 美女脱光衣服让男人捅 | 黄瓜视频91| 日本专区在线 | 国产综合在线观看 | 人妻无码久久一区二区三区免费 | 久久精品aⅴ无码中文字字幕重口 | 亚洲熟女乱色一区二区三区久久久 | 日本网站免费观看 | 在线高清观看免费 | 欧美二级片 | 无套日出白浆 | 欧美成人看片黄a免费看 | 午夜精品视频一区二区三区在线看 | 中文字幕一区二区在线观看视频 | 国产三级91 | 在线免费观看av网站 | 日韩免费视频一区 | 日本中文一区 | 99人妻碰碰碰久久久久禁片 | 亚洲图片在线播放 | 操女人网 | 亚洲天堂一区二区在线观看 | 99视屏 | 一区二区三区视频免费视 | 亚洲字幕成人中文在线观看 | 狠狠躁夜夜躁人 | 中文字幕精品视频 | 欧美成人一区二区视频 | 精品人妻午夜一区二区三区四区 | 国产精品无码久久久久一区二区 | 国产偷人妻精品一区二区在线 | 久久综合在线 | 国产在线视频第一页 | 深喉口爆一区二区三区 | 国产短视频一区 | 欧美一区二区激情视频 | 久久国产中文字幕 | sm在线看 | 国产一区网站 | 免费一级大片 | 亚洲啪啪免费视频 | 亚洲aⅴ在线 | 天堂视频在线 | 美女mm131爽爽爽免费动视频 | 成人免费网视频 | www.youjizz.com亚洲 | 欧美日本综合 | 五月激情天 | 亚洲精品ww | 亚洲蜜桃视频 | 国产精品v亚洲精品v日韩精品 | 日韩日日日 | 亚洲另类天堂 | 亚洲天堂免费观看 | 色狠狠av| 能免费看黄色的网站 | 亚洲无色 | 日韩啊v | 久久精品国产亚洲AV成人雅虎 | 都市激情亚洲一区 | 99视频在线精品免费观看2 | 免费看一级黄色大全 | 美女扒开屁股让男人桶 | 国产精品资源网站 | 91网站免费观看 | 黄色片a级 | 日韩av在线网站 | 老熟女毛茸茸浓毛 | 天天视频污 | 91视频免费看 |