<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          NumPy庫(kù)入門(mén)教程:基礎(chǔ)知識(shí)總結(jié)

          共 3686字,需瀏覽 8分鐘

           ·

          2021-12-10 06:19

          點(diǎn)擊上方小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)



          numpy可以說(shuō)是Python運(yùn)用于人工智能和科學(xué)計(jì)算的一個(gè)重要基礎(chǔ),近段時(shí)間恰好學(xué)習(xí)了numpy,pandas,sklearn等一些Python機(jī)器學(xué)習(xí)和科學(xué)計(jì)算庫(kù),因此在此總結(jié)一下常用的用法。


          1?numpy數(shù)組的創(chuàng)建


          通過(guò)array方式創(chuàng)建,向array中傳入一個(gè)list實(shí)現(xiàn)


          一維數(shù)組的創(chuàng)建:



          二維數(shù)組的創(chuàng)建:傳入一個(gè)嵌套的list即可,如下例:



          通過(guò)arange創(chuàng)建數(shù)組:下例中創(chuàng)建一個(gè)0~1間隔為0.1的行向量,從0開(kāi)始,不包括1,第二個(gè)例子通過(guò)對(duì)齊廣播方式生成一個(gè)多維的數(shù)組。




          通過(guò)linspace函數(shù)創(chuàng)建數(shù)組:下例中創(chuàng)建一個(gè)0~1間隔為1/9的行向量(按等差數(shù)列形式生成),從0開(kāi)始,包括1.



          通過(guò)logspace函數(shù)創(chuàng)建數(shù)組:下例中創(chuàng)建一個(gè)1~100,有20個(gè)元素的行向量(按等比數(shù)列形式生成),其中0表示10^0=1,2表示10^2=100,從1開(kāi)始,包括100



          生成特殊形式數(shù)組:


          生成全0數(shù)組(zeros()函數(shù)),生成全1數(shù)組(ones()函數(shù)), 僅分配內(nèi)存但不初始化的數(shù)組(empty()函數(shù))。


          注意要指定數(shù)組的規(guī)模(用一個(gè)元組指定),同時(shí)要指定元素的類(lèi)型,否則會(huì)報(bào)錯(cuò)



          生成隨機(jī)數(shù)組



          通過(guò)frombuffer,fromstring,fromfile和fromfunction等函數(shù)從字節(jié)序列、文件等創(chuàng)建數(shù)組,下例中生成一個(gè)9*9乘法表



          2?顯示、創(chuàng)建、改變數(shù)組元素的屬性、數(shù)組的尺寸等




          3?改變數(shù)組的尺寸


          reshape方法,第一個(gè)例子是將43矩陣轉(zhuǎn)為34矩陣,第二個(gè)例子是將行向量轉(zhuǎn)為列向量。注意在numpy中,當(dāng)某個(gè)軸的指定為-1時(shí),此時(shí)numpy會(huì)根據(jù)實(shí)際的數(shù)組元素個(gè)數(shù)自動(dòng)替換-1為具體的大小,如第二例,我們指明了c僅有一列,而b數(shù)組有12個(gè)元素,因此c被自動(dòng)指定為12行1列的矩陣,即一個(gè)12維的列向量。




          4?元素索引和修改


          簡(jiǎn)單的索引形式和切片:




          當(dāng)使用布爾數(shù)組b作為下標(biāo)存取數(shù)組x中的元素時(shí),將收集數(shù)組x中所有在數(shù)組b中對(duì)應(yīng)下標(biāo)為T(mén)rue的元素。使用布爾數(shù)組作為下標(biāo)獲得的數(shù)組不和原始數(shù)組共享數(shù)據(jù)空間,注意這種方式只對(duì)應(yīng)于布爾數(shù)組(array),不能使用布爾列表(list)。(附注:當(dāng)布爾數(shù)組的長(zhǎng)度與被索引的數(shù)組的長(zhǎng)度短時(shí),不足的部分都當(dāng)作False)



          利用條件進(jìn)行索引:利用不等式等進(jìn)行索引



          多維數(shù)組的索引和切片(右邊框圖中的顏色和左邊的指令的顏色相對(duì)應(yīng)):



          同樣的,可以采用bool型的方式對(duì)數(shù)組進(jìn)行索引和切片操作



          其實(shí)多維數(shù)組的索引還是很好理解的,例如下例中,我們可以看到對(duì)于一個(gè)張量,也就是b,對(duì)其索引是,[i,j,k]中的i表示選擇第幾個(gè)二維數(shù)組,然后j表示取二維數(shù)組中的第幾個(gè)行向量,k表示取行向量中的第幾個(gè)元素。



          5?ufunc操作


          ufunc是universal function的縮寫(xiě),它是一種能對(duì)數(shù)組的每個(gè)元素進(jìn)行操作的函數(shù)。numPy內(nèi)置的許多ufunc函數(shù)都是在C語(yǔ)言級(jí)別實(shí)現(xiàn)的,因此它們的計(jì)算速度非常快。下面給一個(gè)計(jì)算sin函數(shù)(sin函數(shù)計(jì)算數(shù)組中全部元素的sin值)的小實(shí)例:



          四則運(yùn)算符可以直接用于數(shù)組(一維或多維)計(jì)算:




          比較操作也可直接進(jìn)行,如下,比較x1和x2各對(duì)應(yīng)元素的大小,返回的是一個(gè)bool型數(shù)組。


          可用的操作符有 ‘==’,‘!

          =’,‘<’,‘>’,‘<=’,‘>=’等。另外可以使用數(shù)組的any()或all()方法。只要數(shù)組中有一個(gè)值為T(mén)rue,則any()返回True;而只有數(shù)組的全部元素都為T(mén)rue,all()才返回True。




          想要了解更多的numpy自帶的ufunc函數(shù),可以查看這篇博客:


          自定義ufunc函數(shù):frompyfunc(func,nin,nout) 函數(shù)可以將計(jì)算單個(gè)值的函數(shù)轉(zhuǎn)換成一個(gè)可對(duì)數(shù)組中每個(gè)元素進(jìn)行計(jì)算的ufunc函數(shù)。其中nin是輸入func的參數(shù)的個(gè)數(shù),nout是func返回值的個(gè)數(shù)。如下例。



          reduce方法(與Python的reduce函數(shù)類(lèi)似,其沿著axis軸對(duì)array進(jìn)行操作)




          accumulate方法(其作用和reduce方法類(lèi)似,但是會(huì)保存中間結(jié)果)



          outer方法(對(duì)其兩個(gè)參數(shù)數(shù)組的每?jī)蓪?duì)元素的組合進(jìn)行運(yùn)算,計(jì)算外積):若數(shù)組a的維數(shù)為M,數(shù)組b的維數(shù)為N,則ufunc函數(shù)op的outer()方法對(duì)a、b數(shù)組計(jì)算所生成的數(shù)組c的維數(shù)為M+N,c的形狀是a、b的形狀的結(jié)合。例如a的形狀為(2,3),b的形狀為(4,5),則c的形狀為(2,3,4,5)。


          6?廣播操作


          廣播是針對(duì)形狀不同的數(shù)組的運(yùn)算采取的操作。當(dāng)我們使用ufunc函數(shù)對(duì)兩個(gè)數(shù)組進(jìn)行計(jì)算時(shí),ufunc函數(shù)會(huì)對(duì)這兩個(gè)數(shù)組的對(duì)應(yīng)元素進(jìn)行計(jì)算,因此它要求這兩個(gè)數(shù)組有相同的大小(shape相同)。如果兩個(gè)數(shù)組的shape不同的話(huà)(行列規(guī)模不等),會(huì)進(jìn)行如下的廣播(broadcasting)處理:


          1)讓所有輸入數(shù)組都向其中shape最長(zhǎng)的數(shù)組看齊,shape中不足的部分都通過(guò)在前面加1補(bǔ)齊。因此輸出數(shù)組的shape是輸入數(shù)組shape的各個(gè)軸上的最大值(往最大軸長(zhǎng)上靠)。


          2)如果輸入數(shù)組的某個(gè)軸和輸出數(shù)組的對(duì)應(yīng)軸的長(zhǎng)度相同或者其長(zhǎng)度為1時(shí),這個(gè)數(shù)組能夠用來(lái)計(jì)算,否則出錯(cuò)。


          3)當(dāng)輸入數(shù)組的某個(gè)軸的長(zhǎng)度為1時(shí),沿著此軸運(yùn)算時(shí)都用此軸上的第一組值。



          感覺(jué)說(shuō)的不太明白,于是還是用實(shí)例說(shuō)話(huà)好了。


          7 矩陣運(yùn)算

          矩陣乘法(dot乘法,注意要符合矩陣乘法規(guī)則



          內(nèi)積(inner,計(jì)算向量/矩陣內(nèi)積):和dot乘積一樣,對(duì)于兩個(gè)一維數(shù)組,計(jì)算的是這兩個(gè)數(shù)組對(duì)應(yīng)下標(biāo)元素的乘積和;對(duì)于多維數(shù)組a和b,它計(jì)算的結(jié)果數(shù)組中的每個(gè)元素都是數(shù)組a和b的最后一維的內(nèi)積,因此數(shù)組a和b的最后一維的長(zhǎng)度必須相同。


          計(jì)算公式為:

          inner(a, b)[i,j,k,m] = sum(a[i,j,:]*b[k,m,:])




          外積(outer,計(jì)算外積):只按照一維數(shù)組進(jìn)行計(jì)算,如果傳入?yún)?shù)是多維數(shù)組,則先將此數(shù)組展平為一維數(shù)組之后再進(jìn)行運(yùn)算。outer乘積計(jì)算的列向量和行向量的矩陣乘積。



          解線(xiàn)性方程組(solve):solve(a,b)有兩個(gè)參數(shù)a和b。a是一個(gè)N*N的二維數(shù)組,而b是一個(gè)長(zhǎng)度為N的一維數(shù)組,solve函數(shù)找到一個(gè)長(zhǎng)度為N的一維數(shù)組x,使得a和x的矩陣乘積正好等于b,數(shù)組x就是多元一次方程組的解。



          8 文件存取

          a.tofile(file_name)?,保存a到file_name文件中,file_name為字符串類(lèi)型,如‘a(chǎn).txt’等;從文件中讀回a數(shù)組時(shí)需要指明類(lèi)型,如:b=np.fromfile(file_name,dtype=np.float)


          時(shí)會(huì)報(bào)錯(cuò),正確的使用方式是:

          b=np.fromfile(file_name,dtype=np.int32)


          save和load方法(寫(xiě)入文件和從文件讀回都不需要指明類(lèi)型,存儲(chǔ)文件類(lèi)型為npy格式文件):


          np.save(“a.npy”,?a)????#?將array?a存入a.npy文件中c = np.load( “a.npy” ) # 從a.npy文件中讀回array a


          savetxt和loadtxt方法(保存為txt格式文件):


          np.savetxt(“a.txt”, a)  # 將array a存入a.txt文件中np.loadtxt(“a.txt”)     # 從a.txt文件中讀回array a


          -?END -

          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車(chē)道線(xiàn)檢測(cè)、車(chē)輛計(jì)數(shù)、添加眼線(xiàn)、車(chē)牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  水蜜桃视频网址 | 日本一道本一二三 | 韩国精品在线播放 | 国产麻豆精品成人毛片 | 亚洲午夜久久久久久久久红桃 |