1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        手把手教你用Python的NumPy包處理數(shù)據(jù)

        共 5153字,需瀏覽 11分鐘

         ·

        2020-12-11 06:35


        導讀:本文讓你快速了解一下如何開始使用NumPy。一旦你熟悉了NumPy,就會發(fā)現(xiàn)Python世界中的大多數(shù)科學計算都是圍繞NumPy構建的。因此花在NumPy上的學習時間最終對你是有益的。


        作者:阿迪蒂亞·夏爾馬(Aditya Sharma)、維什韋什·拉維·什里馬利(Vishwesh Ravi Shrimali)、邁克爾·貝耶勒(Michael Beyeler)
        來源:大數(shù)據(jù)DT(ID:hzdashuju)




        如果你已經(jīng)安裝了Anaconda,那么就假設你已經(jīng)在虛擬環(huán)境中安裝了NumPy。如果你使用過Python的標準發(fā)行版或任何其他發(fā)行版,你可以訪問

        http://www.numpy.org

        并按照所提供的安裝說明進行操作。


        01?導入NumPy

        一旦啟動了一個新的IPython或者Jupyter會話,就可以導入Numpy模塊并按照以下步驟來驗證版本:

        import?numpy
        numpy.__version__

        輸出結果:


        1.15.4

        提示:記得在Jupyter Notebook中,鍵入命令后,你可以按下Ctrl+Enter,以執(zhí)行一個單元格。或者,按下Shift+Enter以執(zhí)行單元格,并自動插入或者選擇該單元格下面的單元格。依次單擊Help | Keyboard Shortcut以檢查所有的鍵盤快捷鍵,或者依次單擊Help | User Interface Tour以進行快速瀏覽。

        此處討論的部分包,建議使用NumPy 1.8版本或后續(xù)版本。按照慣例,你會發(fā)現(xiàn)在科學Python領域中,大多數(shù)人導入NumPy都會使用np作為別名:

        import?numpy?as?np
        np.__version__

        輸出結果:


        1.15.4


        02 理解NumPy數(shù)組

        Python是一種弱類型的語言。這就意味著,你無論何時創(chuàng)建一個新變量,都不必指定數(shù)據(jù)類型。例如,下面的內(nèi)容將自動表示為一個整數(shù):

        a?=?5

        輸入下面內(nèi)容以再次確認:

        type(a)

        輸出結果:


        int

        注意:因為標準Python實現(xiàn)是用C編寫的,所以每個Python對象本質(zhì)上是一個偽C結構。這對于Python中的整數(shù)也是如此,實際上它是指向復合C結構的指針,包含的不僅僅是原始整數(shù)值。因此,用于表示Python整數(shù)的默認C數(shù)據(jù)類型將依賴于你的系統(tǒng)架構(即系統(tǒng)是32位還是64位平臺)。

        更進一步,我們使用list()命令可以創(chuàng)建一個整數(shù)列表,這是Python中的標準多元素容器。range (x)函數(shù)將創(chuàng)建從0到x–1的所有整數(shù)。要輸出變量,你可以使用print函數(shù),也可以直接輸入變量名字并按Enter:

        int_list?=?list(range(10))
        int_list

        輸出結果:

        [0,?1,?2,?3,?4,?5,?6,?7,?8,?9]

        類似地,我們通過讓Python遍歷整數(shù)列表int_list中的所有元素,并對每個元素應用str()函數(shù)(該函數(shù)將一個數(shù)轉換成一個字符串),來創(chuàng)建一個字符串列表:

        str_list?=?[str(i)?for?i?in?int_list]
        str_list

        輸出結果:

        ['0',?'1',?'2',?'3',?'4',?'5',?'6',?'7',?'8',?'9']

        可是,用列表進行數(shù)學運算并不是很靈活。例如,我們想要將int_list中的每個元素都乘以一個因子2。執(zhí)行以下操作可能是一種簡單的方法—看看輸出結果是怎樣的:

        int_list?*?2

        輸出結果:

        [0,?1,?2,?3,?4,?5,?6,?7,?8,?9,?0,?1,?2,?3,?4,?5,?6,?7,?8,?9]

        Python創(chuàng)建了一個列表,其內(nèi)容是int_list的所有元素生成了兩次,這并不是我們想要的!

        這就是NumPy的用武之地。NumPy是專為簡化Python中的數(shù)組運算而設計的。我們可以快速將整數(shù)列表轉換為一個NumPy數(shù)組:

        import?numpy?as?np
        int_arr?=?np.array(int_list)
        int_arr

        輸出結果:

        array([0,?1,?2,?3,?4,?5,?6,?7,?8,?9])

        讓我們看看試著將數(shù)組中的每個元素相乘會怎么樣:

        int_arr?*?2

        輸出結果:

        array([?0??2??4??6??8?10?12?14?16?18])

        這次我們做對了!加法、減法、除法以及很多其他運算也是同樣的。

        而且,每個NumPy數(shù)組都具有以下屬性:

        • ndim:維數(shù)。
        • shape:每一維的大小。
        • size:數(shù)組中元素的總數(shù)。
        • dtype:數(shù)組的數(shù)據(jù)類型(例如int、float、string等)。

        讓我們來看看整數(shù)數(shù)組的上述屬性:

        print("int_arr?ndim:?",?int_arr.ndim)
        print("int_arr?shape:?",?int_arr.shape)
        print("int_arr?size:?",?int_arr.size)
        print("int_arr?dtype:?",?int_arr.dtype)

        輸出結果:

        int_arr?ndim:??1
        int_arr?shape:??(10,)
        int_arr?size:??10
        int_arr?dtype:??int64

        從這些輸出中,我們可以看到我們的數(shù)組只包含一維,其包含10個元素且所有元素都是64位的整數(shù)。當然,如果你在32位機器上執(zhí)行這段代碼,你可能會得到dtype:int 32。


        03 通過索引訪問單個數(shù)組元素

        如果你之前使用過Python的標準列表索引,那么你就不會發(fā)現(xiàn)NumPy中的索引有很多問題。在一維數(shù)組中,通過在方括號中指定所需的索引,可以訪問第i個值(從0開始計算),與Python列表一樣:

        int_arr

        輸出結果:

        array([0,?1,?2,?3,?4,?5,?6,?7,?8,?9])

        int_arr[0]

        輸出結果:

        0

        int_arr[3]

        輸出結果:

        3

        要從數(shù)組的末尾建立索引,可以使用負索引號:

        int_arr[-1]

        輸出結果:

        9

        int_arr[-2]

        輸出結果:

        8

        切割數(shù)組還有一些其他很酷的技巧,如下所示:

        int_arr[2:5]?#from?index?2?up?to?index?5?-?1

        輸出結果:

        array([2,?3,?4])

        int_arr[:5]?#from?the?beginning?up?to?index?5?-?1

        輸出結果:

        array([0,?1,?2,?3,?4])

        int_arr[5:]?#from?index?5?up?to?the?end?of?the?array

        輸出結果:

        array([5,?6,?7,?8,?9])

        int_arr[::2]?#every?other?element

        輸出結果:

        array([0,?2,?4,?6,?8])

        int_arr[::-1]?#the?entire?array?in?reverse?order

        輸出結果:

        array([9,?8,?7,?6,?5,?4,?3,?2,?1,?0])

        建議你自己嘗試使用這些數(shù)組!

        提示:NumPy中切割數(shù)組的一般形式與標準Python列表中的相同。使用x [start: stop: step]訪問數(shù)組x中的一個片段。如果沒有指定任何一個值,那么默認值為start=0、stop=size of dimension、step=1。


        04 創(chuàng)建多維數(shù)組

        數(shù)組不必局限于列表。實際上,數(shù)組可以有任意維數(shù)。在機器學習中,通常我們至少要處理二維數(shù)組,列索引表示特定的特征值,行包含實際的特征值。

        使用NumPy可以輕松地從頭開始創(chuàng)建多維數(shù)組。假設我們想要創(chuàng)建一個3行5列的數(shù)組,所有的元素都初始化為0。如果我們不指定數(shù)據(jù)類型,NumPy將默認使用float類型:

        arr_2d?=?np.zeros((3,?5))
        arr_2d

        輸出結果:

        array([[0.,?0.,?0.,?0.,?0.],
        ???????[0.,?0.,?0.,?0.,?0.],
        ???????[0.,?0.,?0.,?0.,?0.]])

        使用OpenCV時你可能就知道:這可以解釋為所有像素設置為0(黑色)的一個3×5的灰度圖像。例如,如果你想要創(chuàng)建具有3個顏色通道(R、G和B)2×4像素的一個小圖像,但是所有像素都設置為白色,我們將使用NumPy創(chuàng)建一個3×2×4的三維數(shù)組:

        arr_float_3d?=?np.ones((3,?2,?4))
        arr_float_3d

        輸出結果:

        array([[[1.,?1.,?1.,?1.],
        ????????[1.,?1.,?1.,?1.]],

        ???????[[1.,?1.,?1.,?1.],
        ????????[1.,?1.,?1.,?1.]],

        ???????[[1.,?1.,?1.,?1.],
        ????????[1.,?1.,?1.,?1.]]])

        這里,第一維定義顏色通道(OpenCV中的藍色、綠色和紅色)。因此,如果這是真實的圖像數(shù)據(jù),我們可以通過切割數(shù)組輕松地獲得第一個通道中的顏色信息:

        arr_float_3d[0,?:,?:]

        輸出結果:

        array([[1.,?1.,?1.,?1.],
        ???????[1.,?1.,?1.,?1.]])

        在OpenCV中,圖像要么是值在0到1之間的32位浮點數(shù)組,要么是值在0到255之間的8位整數(shù)數(shù)組。因此,使用8位整數(shù),通過指定NumPy的dtype屬性并將數(shù)組中的所有1乘以255,我們還可以創(chuàng)建一個2×4像素、全為白色的RGB圖像:

        arr_uint_3d?=?np.ones((3,?2,?4),?dtype=np.uint8)?*?255
        arr_uint_3d

        輸出結果:

        array([[[255,?255,?255,?255],
        ????????[255,?255,?255,?255]],

        ???????[[255,?255,?255,?255],
        ????????[255,?255,?255,?255]],

        ???????[[255,?255,?255,?255],
        ????????[255,?255,?255,?255]]],?dtype=uint8)

        關于作者:阿迪蒂亞·夏爾馬(Aditya Sharma),羅伯特·博世(Robert Bosch)公司的一名高級工程師,致力于解決真實世界的自動計算機視覺問題。曾獲得羅伯特·博世公司2019年人工智能編程馬拉松的首名。

        維什韋什·拉維·什里馬利(Vishwesh Ravi Shrimali),于2018年畢業(yè)于彼拉尼博拉理工學院(BITS Pilani)機械工程專業(yè)。此后一直在BigVision LLC從事深度學習和計算機視覺方面的工作,還參與了官方OpenCV課程的創(chuàng)建。

        邁克爾·貝耶勒(Michael Beyeler),是華盛頓大學神經(jīng)工程和數(shù)據(jù)科學的博士后研究員,致力于仿生視覺的計算模型研究,以為盲人植入人工視網(wǎng)膜(仿生眼睛),改善盲人的感知體驗。他的工作屬于神經(jīng)科學、計算機工程、計算機視覺和機器學習的交叉領域。


        本文摘編自機器學習:使用OpenCV、Python和scikit-learn進行智能圖像處理(原書第2版)》,經(jīng)出版方授權發(fā)布。


        延伸閱讀機器學習》(原書第2版)

        點擊上圖了解及購買

        轉載請聯(lián)系微信:DoctorData


        推薦語:一本基于OpenCV4和Python的機器學習實戰(zhàn)手冊,既詳細介紹機器學習及OpenCV相關的基礎知識,又通過具體實例展示如何使用OpenCV和Python實現(xiàn)各種機器學習算法,并提供大量示例代碼,可以幫助你掌握機器學習實用技巧,解決各種不同的機器學習和圖像處理問題。



        劃重點?


        干貨直達?


        更多精彩?

        在公眾號對話框輸入以下關鍵詞
        查看更多優(yōu)質(zhì)內(nèi)容!

        PPT?|?讀書?|?書單?|?硬核?|?干貨?|?講明白?|?神操作
        大數(shù)據(jù)?|?云計算?|?數(shù)據(jù)庫?|?Python?|?可視化
        AI?|?人工智能?|?機器學習?|?深度學習?|?NLP
        5G?|?中臺?|?用戶畫像?|?1024?|?數(shù)學?|?算法?|?數(shù)字孿生

        據(jù)統(tǒng)計,99%的大咖都完成了這個神操作
        ?


        瀏覽 18
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            韩日三级电影在线观看 | 欧美曰韩精品 | 精品孕妇一级A片免费看 | 淫色淫香网站 | 女女调教vk | 国内精品久久久久久久久久98 | 影音先锋成人在线资源站 | 中文在线а天堂中文在线新版 | 女人高潮偷拍视频 | 欧美男同gay巨大男吊 |