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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

numpy学习4:NumPy基本操作

發(fā)布時間:2025/3/20 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numpy学习4:NumPy基本操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、數(shù)組與標量、數(shù)組之間的運算

數(shù)組不用循環(huán)即可對每個元素執(zhí)行批量的算術運算操作,這個過程叫做矢量化,即用數(shù)組表達式代替循環(huán)的做法

矢量化數(shù)組運算性能比純Python方式快上一兩個數(shù)據(jù)級。

大小相等的兩個數(shù)組之間的任何算術運算都會將其運算應用到元素級上的操作。

**元素級操作:**在NumPy中,大小相等的數(shù)組之間的運算,為元素級運算,即只用于位置相同的元素之間,所得的運算結果組成一個新的數(shù)組,運算結果的位置跟操作數(shù)位置相同。

1.1、數(shù)組與標量之間的運算

數(shù)組與標量之間的運算的意思是:數(shù)組和元素的運算,例如,在一個矩陣的基礎上加上一個數(shù),得到另外一個新的矩陣。

a = np.arange(9).reshape(3,3) print("運算前:") print(a) print("加法:") print(a+2) print("減法:") print(a-2) print("乘法:") print(a*2) print("除法:") print(a/2)

輸出:

運算前: [[0 1 2][3 4 5][6 7 8]] 加法: [[ 2 3 4][ 5 6 7][ 8 9 10]] 減法: [[-2 -1 0][ 1 2 3][ 4 5 6]] 乘法: [[ 0 2 4][ 6 8 10][12 14 16]] 除法: [[0. 0.5 1. ][1.5 2. 2.5][3. 3.5 4. ]]

1.2、數(shù)組與數(shù)組之間的運算

'''Numpy算數(shù)運算用于執(zhí)行算數(shù)運算的輸入數(shù)組必須具有相同的行列或符合數(shù)組廣播規(guī)則 ''' a = np.arange(9).reshape(3,3) b = np.array([1,3,2]) print(a) print(b) print('**************************************') #兩個數(shù)組相加 print(np.add(a,b)) print(a+b) print('**************************************') #兩個數(shù)組相減 print(a-b) print(np.subtract(a,b)) print('**************************************') #兩個數(shù)組相乘 print(a*b) print(np.multiply(a,b)) print('**************************************') print(a/b) print(np.divide(a,b)) print('**************************************')#兩個數(shù)組取冪 print(a**b) print(np.power(a,b)) print('**************************************') print()print() print('****************兩個數(shù)組取余**********************') #mod 兩個數(shù)組取余 a = np.array([10,20,30]) b = np.array([3,5,7]) print(np.mod(a,b)) print(np.remainder(a,b)) print('**************************************') print()

鑒于篇幅,輸出結果就不給出了,結果也就是矩陣的基本運算的結果。

二、 數(shù)組的矩陣積(matrix product)

**矩陣:**多維數(shù)組即矩陣

**矩陣積(matrix product):**兩個二維矩陣(行和列的矩陣)滿足第一個矩陣的列數(shù)與第二個矩陣的行數(shù)相同,那么可以進行矩陣的乘法,即矩陣積,矩陣積不是元素級的運算。也稱為點積、數(shù)量積。

即對應的每一行與每一列的元素對應相乘,得到新的矩陣。

print("*"*20) arr1 = np.array([[10,6,20],[15,5,10],[12,67,20] ]) arr2 = np.array([[12.3,0.4],[24,2.4],[9.8,0.4] ]) #print(arr2) print(arr1.dot(arr2)) print('*'*20)

三、 數(shù)組的索引與切片

每個矩陣都是有索引的,在行和列的方向上,都對應有索引,其實也相同于c語言或者java的數(shù)組索引類似,通過這樣的方式,我們就可以很方便的獲取部分值。

3.1、基本索引

類似于c語言或者java的數(shù)組操作

arr=np.array([[[1,2,3,4],[2,3,4,5],[3,4,5,6]],[[10,20,30,40],[20,30,40,50],[30,40,50,60]]]) print(arr[1]) print(arr[1][1]) print(arr[1][1][2])

3.2、切片操作

通過在某一個維度上,更加細類度的獲取相應的元素的過程。
通過使用::,來指定獲取的元素的數(shù)量。

arr=np.array([[[1,2,3,4],[2,3,4,5],[3,4,5,6]],[[10,20,30,40],[20,30,40,50],[30,40,50,60]]])#取50 print(arr[1][1][3:])

注意:

  • 使用np.ix_()索引器
a = np.arange(9).reshape(3,3) print(a)#使用索引器 np.ix_() num = a[np.ix_([0,1,2],[0,1])] #獲取第0,1,2行的第0,1列的元素 print(num)
  • 花式索引
    **花式索引(Fancy indexing)**指的是利用整數(shù)數(shù)組進行索引的方式。

  • 布爾索引

利用布爾類型的數(shù)組進行數(shù)據(jù)索引,最終返回的結果是對應索引數(shù)組中數(shù)據(jù)為True位置的值。

names = np.array(['james','lobe','tom']) scores = np.array([[98,86,55,90],[70,86,90,99],[82,55,89,86] ]) classic = np.array(['語文','數(shù)學','英語','科學']) print('lobe的成績是:') # print(names=='lobe') print(scores[names=='lobe'])print('lobe的數(shù)學成績:') # print(scores[names=='lobe',classic=='數(shù)學']) print(scores[names=='lobe'].reshape(-1,)[classic=='數(shù)學'])print('james和lobe的成績是:') print(scores[(names=='james')|(names=='lobe')])print('非james和lobe的成績') print(scores[(names!='james')&(names!='lobe')])

輸出:

lobe的成績是: [[70 86 90 99]] lobe的數(shù)學成績: [86] james和lobe的成績是: [[98 86 55 90][70 86 90 99]] 非james和lobe的成績 [[82 55 89 86]]

四、 數(shù)組的轉置與軸對換

數(shù)組轉置是指將shape進行重置操作,并將其值重置為原始shape元組的倒置,比如原始的shape值為:(2,3,4),那么轉置后的新元組的shape的值為: (4,3,2)f

可以通過調(diào)用數(shù)組的transpose函數(shù)或者T屬性進行數(shù)組轉置操作

'''數(shù)組轉置與軸對換 ''' arr = np.arange(100).reshape(10,10) print(arr.shape) # print(np.transpose(arr)) #print(arr.transpose()) print(arr.T)

五、 通用函數(shù):快速的元素級數(shù)組成函數(shù)

**ufunc:**numpy模塊中對ndarray中數(shù)據(jù)進行快速元素級運算的函數(shù),也可以看做是簡單的函數(shù)(接受一個或多個標量值,并產(chǎn)生一個或多個標量值)的矢量化包裝器。

主要包括一元函數(shù)和二元函數(shù)

  • 一元函數(shù)

  • 二元函數(shù)

六、 聚合函數(shù)

聚合函數(shù)是對一組值(eg一個數(shù)組)進行操作,返回一個單一值作為結果的函數(shù)。當然聚合函數(shù)也可以指定對某個具體的軸進行數(shù)據(jù)聚合操作;常將的聚合操作有:平均值、最大值、最小值、方差等等

這些操作類似于數(shù)據(jù)庫的聚合函數(shù),其實操作也很相似,只是應用的場景不一樣。

我們先回顧一下標準差和反差怎么計算:

  • 標準差
    標準差是與平均值的偏差的平方的平均值的平方根
    std = sqrt(mean((x-x.mean())**2))

  • 方差
    方差是偏差的平方的平均值即mean(x-x.mean()**2)

import numpy as np '''NumPy - 統(tǒng)計函數(shù)NumPy 有很多有用的統(tǒng)計函數(shù),用于從數(shù)組中給定的元素中查找最小,最大,百分標準差和方差等 '''# a = np.random.randint(1,15,size = (3,3)) a = np.array([[1,2,3,4],[7,8,9,10]])print(a) #amin返回最小值 print('------------amin 返回最小值-------------') print(np.amin(a,1)) #參數(shù)1 表示同行數(shù)據(jù) print(np.amin(a,0)) #參數(shù)0 表示同列數(shù)據(jù) #amax返回最大值 print('------------amax 返回最大值-------------') print(np.amax(a,1)) print(np.amax(a,0))#mean 平均值 print('------------mean 平均值-------------') print(np.mean(a)) print(np.mean(a,0)) #求列平均值 print(np.mean(a,axis = 1)) #求行平均值#標準差 arr2 = np.array([[1,2,3,4],[7,8,9,10]]) print(arr2) # print(arr2-arr2.mean()) #平均值的偏差 print(((arr2-arr2.mean())**2).sum()/arr2.size)#平均值的偏差的平方的平均值 print(np.mean(((arr2-arr2.mean())**2)))#平均值的偏差的平方的平均值 print(np.sqrt(((arr2-arr2.mean())**2).sum()/arr2.size)) print(np.sqrt(np.mean(((arr2-arr2.mean())**2)))) print(np.std(arr2,0)) print('************************') '''方差方差是偏差的平方的平均值即mean(x-x.mean()**2) ''' arr3 = np.array([[1,2,3,4],[7,8,9,10]]) # print(np.var(arr3)) # print(arr3-arr3.mean()) print(((arr3-arr3.mean())**2).sum()/arr3.size) print(np.mean((arr3-arr3.mean())**2)) print(np.var(arr3))

七、 np.where函數(shù)

np.where函數(shù)是三元表達式x if condition else y的矢量化版本,由此,我們就很清楚這個函數(shù)的作用了。

xarr = np.array([1,2,3,4,5]) yarr = np.array([6,7,8,9,10]) condition = xarr < yarr #傳統(tǒng)的三元表達式 # zip 函數(shù)接受一系列可迭代對象作為參數(shù),將對象中對應的元素打包成一個個tuple(元組), # 然后返回由這些tuples組成的list(列表) result1 = [x if c else y for (x,y,c) in zip(xarr,yarr,condition)] print(result1) result2 = np.where(condition,xarr,yarr) print(result2)

**案例:**將數(shù)組中的所有異常數(shù)字替換為0,比如將NaN替換為0

arr = np.array([[1,2,np.NaN,4],[4,5,6,np.NaN],[np.inf,7,8,9],[np.inf,np.e,np.pi,4] ])print('原數(shù)組:') print(arr) #設置條件 condition = np.isnan(arr) | np.isinf(arr) print('結果:') print(np.where(condition,0,arr))

八、 np.unique函數(shù)

np.unique函數(shù)的主要作用是將數(shù)組中的元素進行 去重操作(也就是只保存不重復的數(shù)據(jù))

arr = np.array(['1','2','3','2','4','2','5','7','7']) print('原始數(shù)組:') for a in arr:print(a,end = ' ') print()print('去重數(shù)據(jù):') arr2 = np.unique(arr) for a in arr2:print(a,end = ' ') print()

輸出:

原始數(shù)組: 1 2 3 2 4 2 5 7 7 去重數(shù)據(jù): 1 2 3 4 5 7

九、排序函數(shù)

  • numpy.sort()
    函數(shù)返回輸入數(shù)組的排序副本
    numpy.sort(a,axis,kind,order)
a :要排序的函數(shù)
axis:壓著它排序數(shù)組的軸,如果沒有數(shù)組會被展開,沿著最后的軸排序
kind:默認為’quicksort’快速排序
order:如果數(shù)組包含字段,則是要排序的字段
arr = np.array([[5,7],[8,1]]) print('我們的數(shù)組是:') print(arr) print('調(diào)用sort排序:') print(np.sort(arr)) print('沿軸0排序') print(np.sort(arr,axis = 0)) #按列排序 print(' sort 函數(shù)中排序字段') # 在 sort 函數(shù)中排序字段 dt = np.dtype([('name', 'S10'),('age', int)]) a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt) print('我們的數(shù)組是:') print(a) print(a['name']) print('調(diào)用sort 按 name字段排序:') print(np.sort(a,order = 'name')) print('調(diào)用sort 按 age字段排序:') print(np.sort(a,order = 'age'))

文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關注我的微信公眾號:cplus人工智能算法后端技術,獲取優(yōu)質(zhì)學習資源。

總結

以上是生活随笔為你收集整理的numpy学习4:NumPy基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。