0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

最詳細(xì)的 NumPy 圖解教程!

數(shù)據(jù)分析與開(kāi)發(fā) ? 來(lái)源:大數(shù)據(jù)文摘 ? 作者:大數(shù)據(jù)文摘 ? 2021-06-09 18:03 ? 次閱讀

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

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

NumPy中的數(shù)組操作

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

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

d3cfeb46-c540-11eb-9e57-12bb97331649.jpg

一旦我們創(chuàng)建了數(shù)組,我們就可以用其做點(diǎn)有趣的應(yīng)用了,文摘菌將在下文展開(kāi)說(shuō)明。

數(shù)組的算術(shù)運(yùn)算

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

d3e802c6-c540-11eb-9e57-12bb97331649.png

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

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

d40961aa-c540-11eb-9e57-12bb97331649.jpg

許多情況下,我們希望進(jìn)行數(shù)組和單個(gè)數(shù)值的操作(也稱作向量和標(biāo)量之間的操作)。比如:如果數(shù)組表示的是以英里為單位的距離,我們的目標(biāo)是將其轉(zhuǎn)換為公里數(shù)??梢院?jiǎn)單的寫(xiě)作data * 1.6:

d42978a0-c540-11eb-9e57-12bb97331649.png

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

數(shù)組的切片操作

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

d43fb14c-c540-11eb-9e57-12bb97331649.png

聚合函數(shù)

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

d44b62b2-c540-11eb-9e57-12bb97331649.jpg

除了min,max和sum等函數(shù),還有mean(均值),prod(數(shù)據(jù)乘法)計(jì)算所有元素的乘積,std(標(biāo)準(zhǔn)差),等等。上面的所有例子都在一個(gè)維度上處理向量。除此之外,NumPy之美的一個(gè)關(guān)鍵之處是它能夠?qū)⒅八吹降乃泻瘮?shù)應(yīng)用到任意維度上。

NumPy中的矩陣操作

創(chuàng)建矩陣

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

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

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

d4688572-c540-11eb-9e57-12bb97331649.jpg

矩陣的算術(shù)運(yùn)算

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

d476619c-c540-11eb-9e57-12bb97331649.png

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

d4a5dd46-c540-11eb-9e57-12bb97331649.jpg

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

d4d56c32-c540-11eb-9e57-12bb97331649.png

上圖的底部添加了矩陣尺寸,以強(qiáng)調(diào)運(yùn)算的兩個(gè)矩陣在列和行必須相等。可以將此操作圖解為如下所示:

d4eb2338-c540-11eb-9e57-12bb97331649.jpg

矩陣的切片和聚合

索引和切片功能在操作矩陣時(shí)變得更加有用??梢栽诓煌S度上使用索引操作來(lái)對(duì)數(shù)據(jù)進(jìn)行切片。

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

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

矩陣的轉(zhuǎn)置和重構(gòu)

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

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

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

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

d59f8882-c540-11eb-9e57-12bb97331649.jpg

NumPy中的公式應(yīng)用示例

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

d5b3750e-c540-11eb-9e57-12bb97331649.png

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

d63e1ec0-c540-11eb-9e57-12bb97331649.jpg

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

d66c614a-c540-11eb-9e57-12bb97331649.png

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

d68c8c5e-c540-11eb-9e57-12bb97331649.png

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

d696a7a2-c540-11eb-9e57-12bb97331649.png

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

d6abd0d2-c540-11eb-9e57-12bb97331649.png

最終得到該預(yù)測(cè)的誤差值和模型質(zhì)量分?jǐn)?shù)。

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

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

表和電子表格

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

音頻和時(shí)間序列

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

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

圖像

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

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

語(yǔ)言

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

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

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

然后我們用詞匯表中的id替換每個(gè)單詞。

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

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

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

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

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

轉(zhuǎn)自:大數(shù)據(jù)文摘

原文鏈接:https://jalammar.github.io/visual-numpy/

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STD
    STD
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    14314
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84076
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1197

    瀏覽量

    24537

原文標(biāo)題:這是我見(jiàn)過(guò)最好的 NumPy 圖解教程!

文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    思嵐科技SLAMKit定位與建圖解決方案介紹

    2023年11月,面對(duì)客戶高效穩(wěn)定的定位和建圖需求,思嵐科技以業(yè)界創(chuàng)新的產(chǎn)品形態(tài)提供了SLAMKit定位和建圖解決方案,以軟件授權(quán)的方式嵌入運(yùn)行在機(jī)器人的主控器中,并為機(jī)器人提供環(huán)境建模與自主定位的能力。
    的頭像 發(fā)表于 09-13 11:20 ?303次閱讀
    思嵐科技SLAMKit定位與建<b class='flag-5'>圖解</b>決方案介紹

    使用NumPy實(shí)現(xiàn)前饋神經(jīng)網(wǎng)絡(luò)

    要使用NumPy實(shí)現(xiàn)一個(gè)前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Network),我們需要從基礎(chǔ)開(kāi)始構(gòu)建,包括初始化網(wǎng)絡(luò)參數(shù)、定義激活函數(shù)及其導(dǎo)數(shù)、實(shí)現(xiàn)前向傳播、計(jì)算損失函數(shù)、以及實(shí)現(xiàn)
    的頭像 發(fā)表于 07-11 16:30 ?1286次閱讀

    NNG宣布為Dacia汽車(chē)提供基于OpenStreetMap的地圖解決方案

    在智能出行日益成為主流的今天,汽車(chē)導(dǎo)航系統(tǒng)的精準(zhǔn)度與實(shí)時(shí)性成為了消費(fèi)者購(gòu)車(chē)時(shí)的重要考量因素之一。近日,全球領(lǐng)先的地圖解決方案提供商N(yùn)NG正式宣布與知名汽車(chē)制造商Dacia達(dá)成戰(zhàn)略合作,共同推出
    的頭像 發(fā)表于 07-04 15:09 ?406次閱讀

    音箱制作過(guò)程圖解

    電子發(fā)燒友網(wǎng)站提供《音箱制作過(guò)程圖解.doc》資料免費(fèi)下載
    發(fā)表于 04-28 09:27 ?9次下載

    python 學(xué)習(xí):在內(nèi)網(wǎng)中 python庫(kù)-numpy 安裝方法,升級(jí)pip3版本的指令

    指令格式如下:先下載numpy庫(kù)到C盤(pán)具體位置 手動(dòng)安裝指令如下: pip install c:\\\\users\\\\sesa738142
    發(fā)表于 04-22 17:18

    基于NumPy的機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)

    David Bourgin 表示他一直在慢慢寫(xiě)或收集不同模型與模塊的純 NumPy 實(shí)現(xiàn),它們跑起來(lái)可能沒(méi)那么快,但是模型的具體過(guò)程一定足夠直觀。每當(dāng)我們想了解模型 API 背后的實(shí)現(xiàn),卻又不想看復(fù)雜的框架代碼,那么它可以作為快速的參考。
    發(fā)表于 01-17 12:36 ?168次閱讀
    基于<b class='flag-5'>NumPy</b>的機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)

    斷路器控制回路接線圖解

    斷路器控制回路接線圖解
    的頭像 發(fā)表于 12-16 09:37 ?1639次閱讀
    斷路器控制回路接線<b class='flag-5'>圖解</b>

    電路圖的符號(hào)大全圖解

    電子發(fā)燒友網(wǎng)站提供《電路圖的符號(hào)大全圖解.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 11:13 ?29次下載
    電路圖的符號(hào)大全<b class='flag-5'>圖解</b>

    什么是MEMS?4步圖解MEMS芯片制造

    最清晰明了的方式,圖解直觀闡述MEMS傳感器芯片的制造過(guò)程和原理! MEMS是Micro Electro Mechanical Systems(微機(jī)電系統(tǒng))的縮寫(xiě),具有微小的立體結(jié)構(gòu)(三維結(jié)構(gòu)),是處理各種輸入、輸出信號(hào)的系統(tǒng)的統(tǒng)稱。 ? 是利用微細(xì)加工技術(shù),將機(jī)械零零件、電子電路
    的頭像 發(fā)表于 11-02 08:37 ?1595次閱讀
    什么是MEMS?4步<b class='flag-5'>圖解</b>MEMS芯片制造

    List和Numpy Array有什么區(qū)別

    Numpy 是Python科學(xué)計(jì)算的一個(gè)核心模塊。它提供了非常高效的數(shù)組對(duì)象,以及用于處理這些數(shù)組對(duì)象的工具。一個(gè)Numpy數(shù)組由許多值組成,所有值的類型是相同的。 Python的核心庫(kù)提供了
    的頭像 發(fā)表于 10-30 10:49 ?649次閱讀
    List和<b class='flag-5'>Numpy</b> Array有什么區(qū)別

    圖解析|四維圖新用戶大會(huì)核心觀點(diǎn)

    · · · · · · · · · · · · · · · · 原文標(biāo)題:一圖解析|四維圖新用戶大會(huì)核心觀點(diǎn) 文章出處:【微信公眾號(hào):四維圖新NavInfo】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
    的頭像 發(fā)表于 10-24 19:45 ?404次閱讀
    一<b class='flag-5'>圖解</b>析|四維圖新用戶大會(huì)核心觀點(diǎn)

    圖解5G信令流程】第六期:當(dāng)你的手機(jī)“起飛”以后,會(huì)發(fā)生什么?

    原文標(biāo)題:【圖解5G信令流程】第六期:當(dāng)你的手機(jī)“起飛”以后,會(huì)發(fā)生什么? 文章出處:【微信公眾號(hào):華為云核心網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
    的頭像 發(fā)表于 10-13 17:45 ?455次閱讀

    寫(xiě)字機(jī)的制作過(guò)程

    寫(xiě)字機(jī)的制作過(guò)程,圖解,利用了core——XY的結(jié)構(gòu),詳細(xì)制作圖解,需要有一定制作基礎(chǔ)的DIY同學(xué)。
    發(fā)表于 09-27 07:41

    Allegro_PCB_設(shè)計(jì)詳細(xì)教程

    Cadence_Allegro_PCB_設(shè)計(jì)詳細(xì)教程全集下載
    發(fā)表于 09-27 06:02

    圖解5G信令流程】第五期:啥?!手機(jī)也會(huì)睡覺(jué)?!

    原文標(biāo)題:【圖解5G信令流程】第五期:啥?!手機(jī)也會(huì)睡覺(jué)?! 文章出處:【微信公眾號(hào):華為云核心網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
    的頭像 發(fā)表于 09-22 17:50 ?701次閱讀
    【<b class='flag-5'>圖解</b>5G信令流程】第五期:啥?!手機(jī)也會(huì)睡覺(jué)?!