<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圖解教程!

          共 7648字,需瀏覽 16分鐘

           ·

          2021-05-25 18:45

          點擊上方AI算法與圖像處理”,選擇加"星標"或“置頂”

          重磅干貨,第一時間送達

          NumPy是Python中用于數(shù)據(jù)分析、機器學習、科學計算的重要軟件包。它極大地簡化了向量和矩陣的操作及處理。python的不少數(shù)據(jù)處理軟件包依賴于NumPy作為其基礎架構的核心部分(例如scikit-learn、SciPy、pandas和tensorflow)。除了數(shù)據(jù)切片和數(shù)據(jù)切塊的功能之外,掌握numpy也使得開發(fā)者在使用各數(shù)據(jù)處理庫調試和處理復雜用例時更具優(yōu)勢。



          在本文中,將介紹NumPy的主要用法,以及它如何呈現(xiàn)不同類型的數(shù)據(jù)(表格,圖像,文本等),這些經(jīng)Numpy處理后的數(shù)據(jù)將成為機器學習模型的輸入。





          NumPy中的數(shù)組操作




          創(chuàng)建數(shù)組


          我們可以通過將python列表傳入np.array()來創(chuàng)建一個NumPy數(shù)組(也就是強大的ndarray)。在下面的例子里,創(chuàng)建出的數(shù)組如右邊所示,通常情況下,我們希望NumPy為我們初始化數(shù)組的值,為此NumPy提供了諸如ones(),zeros()和random.random()之類的方法。我們只需傳入元素個數(shù)即可:


           

          一旦我們創(chuàng)建了數(shù)組,我們就可以用其做點有趣的應用了,文摘菌將在下文展開說明。


          數(shù)組的算術運算


          讓我們創(chuàng)建兩個NumPy數(shù)組,分別稱作data和ones:



          若要計算兩個數(shù)組的加法,只需簡單地敲入data + ones,就可以實現(xiàn)對應位置上的數(shù)據(jù)相加的操作(即每行數(shù)據(jù)進行相加),這種操作比循環(huán)讀取數(shù)組的方法代碼實現(xiàn)更加簡潔。



          當然,在此基礎上舉一反三,也可以實現(xiàn)減法、乘法和除法等操作:



          許多情況下,我們希望進行數(shù)組和單個數(shù)值的操作(也稱作向量和標量之間的操作)。比如:如果數(shù)組表示的是以英里為單位的距離,我們的目標是將其轉換為公里數(shù)。可以簡單的寫作data * 1.6:



          NumPy通過數(shù)組廣播(broadcasting)知道這種操作需要和數(shù)組的每個元素相乘。


          數(shù)組的切片操作


          我們可以像python列表操作那樣對NumPy數(shù)組進行索引和切片,如下圖所示:



          聚合函數(shù)


          NumPy為我們帶來的便利還有聚合函數(shù),聚合函數(shù)可以將數(shù)據(jù)進行壓縮,統(tǒng)計數(shù)組中的一些特征值:



          除了min,max和sum等函數(shù),還有mean(均值),prod(數(shù)據(jù)乘法)計算所有元素的乘積,std(標準差),等等。上面的所有例子都在一個維度上處理向量。除此之外,NumPy之美的一個關鍵之處是它能夠將之前所看到的所有函數(shù)應用到任意維度上。





          NumPy中的矩陣操作




          創(chuàng)建矩陣


          我們可以通過將二維列表傳給Numpy來創(chuàng)建矩陣。

          np.array([[1,2],[3,4]])



          除此外,也可以使用上文提到的ones()、zeros()和random.random()來創(chuàng)建矩陣,只需傳入一個元組來描述矩陣的維度:



          矩陣的算術運算


          對于大小相同的兩個矩陣,我們可以使用算術運算符(+-*/)將其相加或者相乘。NumPy對這類運算采用對應位置(position-wise)操作處理:



          對于不同大小的矩陣,只有兩個矩陣的維度同為1時(例如矩陣只有一列或一行),我們才能進行這些算術運算,在這種情況下,NumPy使用廣播規(guī)則(broadcast)進行操作處理:



          與算術運算有很大區(qū)別是使用點積的矩陣乘法。NumPy提供了dot()方法,可用于矩陣之間進行點積運算:



          上圖的底部添加了矩陣尺寸,以強調運算的兩個矩陣在列和行必須相等。可以將此操作圖解為如下所示:



          矩陣的切片和聚合


          索引和切片功能在操作矩陣時變得更加有用。可以在不同維度上使用索引操作來對數(shù)據(jù)進行切片。



          我們可以像聚合向量一樣聚合矩陣:



          不僅可以聚合矩陣中的所有值,還可以使用axis參數(shù)指定行和列的聚合:



          矩陣的轉置和重構


          處理矩陣時經(jīng)常需要對矩陣進行轉置操作,常見的情況如計算兩個矩陣的點積。NumPy數(shù)組的屬性T可用于獲取矩陣的轉置。



          在較為復雜的用例中,你可能會發(fā)現(xiàn)自己需要改變某個矩陣的維度。這在機器學習應用中很常見,例如模型的輸入矩陣形狀與數(shù)據(jù)集不同,可以使用NumPy的reshape()方法。只需將矩陣所需的新維度傳入即可。也可以傳入-1,NumPy可以根據(jù)你的矩陣推斷出正確的維度:



          上文中的所有功能都適用于多維數(shù)據(jù),其中心數(shù)據(jù)結構稱為ndarray(N維數(shù)組)。



          很多時候,改變維度只需在NumPy函數(shù)的參數(shù)中添加一個逗號,如下圖所示:






          NumPy中的公式應用示例




          NumPy的關鍵用例是實現(xiàn)適用于矩陣和向量的數(shù)學公式。這也Python中常用NumPy的原因。例如,均方誤差是監(jiān)督機器學習模型處理回歸問題的核心:



          在NumPy中可以很容易地實現(xiàn)均方誤差:



          這樣做的好處是,numpy無需考慮predictions與labels具體包含的值。文摘菌將通過一個示例來逐步執(zhí)行上面代碼行中的四個操作:



          預測(predictions)和標簽(labels)向量都包含三個值。這意味著n的值為3。在我們執(zhí)行減法后,我們最終得到如下值:



          然后我們可以計算向量中各值的平方:



          現(xiàn)在我們對這些值求和:



          最終得到該預測的誤差值和模型質量分數(shù)。





          用NumPy表示日常數(shù)據(jù)




          日常接觸到的數(shù)據(jù)類型,如電子表格,圖像,音頻......等,如何表示呢?Numpy可以解決這個問題。


          表和電子表格

          電子表格或數(shù)據(jù)表都是二維矩陣。電子表格中的每個工作表都可以是自己的變量。python中類似的結構是pandas數(shù)據(jù)幀(dataframe),它實際上使用NumPy來構建的。



          音頻和時間序列


          音頻文件是一維樣本數(shù)組。每個樣本都是代表一小段音頻信號的數(shù)字。CD質量的音頻每秒可能有44,100個采樣樣本,每個樣本是一個-65535到65536之間的整數(shù)。這意味著如果你有一個10秒的CD質量的WAVE文件,你可以將它加載到長度為10 * 44,100 = 441,000個樣本的NumPy數(shù)組中。想要提取音頻的第一秒?只需將文件加載到我們稱之為audio的NumPy數(shù)組中,然后截取audio[:44100]。


          以下是一段音頻文件:



          時間序列數(shù)據(jù)也是如此(例如,股票價格隨時間變化的序列)。


          圖像


          圖像是大小為(高度×寬度)的像素矩陣。如果圖像是黑白圖像(也稱為灰度圖像),則每個像素可以由單個數(shù)字表示(通常在0(黑色)和255(白色)之間)。如果對圖像做處理,裁剪圖像的左上角10 x 10大小的一塊像素區(qū)域,用NumPy中的image[:10,:10]就可以實現(xiàn)。


          這是一個圖像文件的片段:



          如果圖像是彩色的,則每個像素由三個數(shù)字表示 :紅色,綠色和藍色。在這種情況下,我們需要第三維(因為每個單元格只能包含一個數(shù)字)。因此彩色圖像由尺寸為(高x寬x 3)的ndarray表示。



          語言


          如果我們處理文本,情況就會有所不同。用數(shù)字表示文本需要兩個步驟,構建詞匯表(模型知道的所有唯一單詞的清單)和嵌入(embedding)。讓我們看看用數(shù)字表示這個(翻譯的)古語引用的步驟:“Have the bards who preceded me left any theme unsung?”


          模型需要先訓練大量文本才能用數(shù)字表示這位戰(zhàn)場詩人的詩句。我們可以讓模型處理一個小數(shù)據(jù)集,并使用這個數(shù)據(jù)集來構建一個詞匯表(71,290個單詞):


           


          然后可以將句子劃分成一系列“詞”token(基于通用規(guī)則的單詞或單詞部分):



          然后我們用詞匯表中的id替換每個單詞:



          這些ID仍然不能為模型提供有價值的信息。因此,在將一系列單詞送入模型之前,需要使用嵌入(embedding)來替換token/單詞(在本例子中使用50維度的word2vec嵌入):



          你可以看到此NumPy數(shù)組的維度為[embedding_dimension x sequence_length]。


          在實踐中,這些數(shù)值不一定是這樣的,但我以這種方式呈現(xiàn)它是為了視覺上的一致。出于性能原因,深度學習模型傾向于保留批數(shù)據(jù)大小的第一維(因為如果并行訓練多個示例,則可以更快地訓練模型)。很明顯,這里非常適合使用reshape()。例如,像BERT這樣的模型會期望其輸入矩陣的形狀為:[batch_size,sequence_length,embedding_size]。


          這是一個數(shù)字合集,模型可以處理并執(zhí)行各種有用的操作。我留空了許多行,可以用其他示例填充以供模型訓練(或預測)。


          事實證明,在我們的例子中,那位詩人的話語比其他詩人的詩句更加名垂千古。盡管生而為奴,詩人安塔拉(Antarah)的英勇和語言能力使他獲得了自由和神話般的地位,他的詩是伊斯蘭教以前的阿拉伯半島《懸詩》的七首詩之一。

          來源丨大數(shù)據(jù)文摘
          原文鏈接丨h(huán)ttps://jalammar.github.io/visual-numpy/


                              
          個人微信(如果沒有備注不拉群!
          請注明:地區(qū)+學校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會分享


          AI算法與圖像處理」公眾號后臺回復:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結分析


          下載2:終身受益的編程指南:Google編程風格指南


          AI算法與圖像處理」公眾號后臺回復:c++,即可下載。歷經(jīng)十年考驗,最權威的編程規(guī)范!



                            
          下載3 CVPR2021

          AI算法與圖像處公眾號后臺回復:CVPR即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文

          點亮 ,告訴大家你也在看





          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  天天插,天天狠,天天透 | 亚洲欧美日韩一区 | 中国老骚逼视频 | 91扒开双腿猛进入jk白丝 | 精品人妻一区二区乱码 |