入門 | 數據科學初學者必知的NumPy基礎知識

2021-02-08 機器之心

選自TowardsDataScience

作者:Ehi Aigiomawu

機器之心編譯

參與:李詩萌、路


本文介紹了一些 NumPy 基礎知識,適合數據科學初學者學習掌握。


NumPy(Numerical Python)是 Python 中的一個線性代數庫。對每一個數據科學或機器學習 Python 包而言,這都是一個非常重要的庫,SciPy(Scientific Python)、Mat-plotlib(plotting library)、Scikit-learn 等都在一定程度上依賴 NumPy。


對數組執行數學運算和邏輯運算時,NumPy 是非常有用的。在用 Python 對 n 維數組和矩陣進行運算時,NumPy 提供了大量有用特徵。


這篇教程介紹了數據科學初學者需要了解的 NumPy 基礎知識,包括如何創建 NumPy 數組、如何使用 NumPy 中的廣播機制、如何獲取值以及如何操作數組。更重要的是,大家可以通過本文了解到 NumPy 在 Python 列表中的優勢:更簡潔、更快速地讀寫項、更方便、更高效。


本教程將使用 Jupyter notebook 作為編輯器。


讓我們開始吧!


安裝 NumPy


如果你已經裝有 Anaconda,那麼你可以使用以下命令通過終端或命令提示符安裝 NumPy:


conda install numpy


如果你沒有 Anaconda,那麼你可以使用以下命令從終端上安裝 NumPy:


pip install numpy


安裝好 NumPy 後,你就可以啟動 Jupyter notebook 開始學習了。接下來從 NumPy 數組開始。


NumPy 數組


NumPy 數組是包含相同類型值的網格。NumPy 數組有兩種形式:向量和矩陣。嚴格地講,向量是一維數組,矩陣是多維數組。在某些情況下,矩陣只有一行或一列。


首先將 NumPy 導入 Jupyter notebook:


import numpy as np


從 Python 列表中創建 NumPy 數組


我們先創建一個 Python 列表:


my_list = [1, 2, 3, 4, 5]


通過這個列表,我們可以簡單地創建一個名為 my_numpy_list 的 NumPy 數組,顯示結果:


my_numpy_list = np.array(my_list)
my_numpy_list  


剛才我們將一個 Python 列錶轉換成一維數組。要想得到二維數組,我們要創建一個元素為列表的列表,如下所示:


second_list = [[1,2,3], [5,4,1], [3,6,7]]
new_2d_arr = np.array(second_list)
new_2d_arr  


我們已經成功創建了一個有 3 行 3 列的二維數組。


使用 arange() 內置函數創建 NumPy 數組


與 Python 的 range() 內置函數相似,我們可以用 arange() 創建一個 NumPy 數組。


my_list = np.arange(10)

my_list = np.arange(0,10)


這產生了 0~10 的十個數字。


要注意的是 arange() 函數中有三個參數。第三個參數表示步長。例如,要得到 0~10 中的偶數,只需要將步長設置為 2 就可以了,如下所示:


my_list = np.arange(0,11,2)


還可以創建有 7 個 0 的一維數組:


my_zeros = np.zeros(7)


也可以創建有 5 個 1 的一維數組:


my_ones = np.ones(5)


同樣,我們可以生成內容都為 0 的 3 行 5 列二維數組:


two_d = np.zeros((3,5))


使用 linspace() 內置函數創建 NumPy 數組


linspace() 函數返回的數字都具有指定的間隔。也就是說,如果我們想要 1 到 3 中間隔相等的 15 個點,我們只需使用以下命令:


lin_arr = np.linspace(1, 3, 15)


該命令可生成一維向量。


與 arange() 函數不同,linspace() 的第三個參數是要創建的數據點數量。


在 NumPy 中創建一個恆等矩陣


處理線性代數時,恆等矩陣是非常有用的。一般而言,恆等矩陣是一個二維方矩陣,也就是說在這個矩陣中列數與行數相等。有一點要注意的是,恆等矩陣的對角線都是 1,其他的都是 0。恆等矩陣一般只有一個參數,下述命令說明了要如何創建恆等矩陣:


my_matrx = np.eye(6)    


用 NumPy 創建一個隨機數組成的數組


我們可以使用 rand()、randn() 或 randint() 函數生成一個隨機數組成的數組。



例如,如果想要一個由 4 個對象組成的一維數組,且這 4 個對象均勻分布在 0~1,可以這樣做:


my_rand = np.random.rand(4)


如果我們想要一個有 5 行 4 列的二維數組,則:


my_rand = np.random.rand(5, 4)
my_rand



my_randn = np.random.randn(7)
my_randn


繪製結果後會得到一個正態分布曲線。


同樣地,如需創建一個 3 行 5 列的二維數組,這樣做即可:


np.random.randn(3,5)



np.random.randint(20)
np.random.randint(2, 20)
np.random.randint(2, 20, 7)


將一維數組轉換成二維數組


先創建一個有 25 個隨機整數的一維數組:


arr = np.random.rand(25)


然後使用 reshape() 函數將其轉換為二維數組:


arr.reshape(5,5)


注意:reshape() 僅可轉換成行列數目相等,且行列數相乘後要與元素數量相等。上例中的 arr 包含 25 個元素,因此只能重塑為 5*5 的矩陣。


定位 NumPy 數組中的最大值和最小值


使用 max() 和 min() 函數,我們可以得到數組中的最大值或最小值:


arr_2 = np.random.randint(0, 20, 10)
arr_2.max()
arr_2.min()


使用 argmax() 和 argmin() 函數,我們可以定位數組中最大值和最小值的索引:


arr_2.argmax()
arr_2.argmin()


假設存在大量數組,而你需要弄清楚數組的形態,你想知道這個數組是一維數組還是二維數組,只需要使用 shape 函數即可:


arr.shape


從 NumPy 數組中索引/選擇多個元素(組)


在 NumPy 數組中進行索引與 Python 類似,只需輸入想要的索引即可:


my_array = np.arange(0,11)
my_array[8]  


為了獲得數組中的一系列值,我們可以使用切片符「:」,就像在 Python 中一樣:


my_array[2:6]
my_array[:6]
my_array[5:]


類似地,我們也可以通過使用 [ ][ ] 或 [,] 在二維數組中選擇元素。


使用 [ ][ ] 從下面的二維數組中抓取出值「60」:


two_d_arr = np.array([[10,20,30], [40,50,60], [70,80,90]])
two_d_arr[1][2]


使用 [,] 從上面的二維數組中抓取出值「20」:


two_d_arr[0,1]


也可以用切片符抓取二維數組的子部分。使用下面的操作從數組中抓取一些元素:


two_d_arr[:1, :2]          
two_d_arr[:2, 1:]          
two_d_arr[:2, :2]          


我們還可以索引一整行或一整列。只需使用索引數字即可抓取任意一行:


two_d_arr[0]    
two_d_arr[:2]


還可以使用 &、|、<、> 和 == 運算符對數組執行條件選擇和邏輯選擇,從而對比數組中的值和給定值:


new_arr = np.arange(5,15)
new_arr > 10


現在我們可以輸出符合上述條件的元素:


bool_arr = new_arr > 10
new_arr[bool_arr]  
new_arr[new_arr>10]


組合使用條件運算符和邏輯運算符,我們可以得到值大於 6 小於 10 的元素:


new_arr[(new_arr>6) & (new_arr<10)]


預期結果為:([7, 8, 9])


廣播機制


廣播機制是一種快速改變 NumPy 數組中的值的方式。


my_array[0:3] = 50

[50, 50, 50, 3, 4,  5,  6,  7,  8,  9, 10]


在這個例子中,我們將索引為 0 到 3 的元素的初始值改為 50。


對 NumPy 數組執行數學運算


arr = np.arange(1,11)
arr * arr              
arr - arr              
arr + arr              
arr / arr              


我們還可以對數組執行標量運算,NumPy 通過廣播機制使其成為可能: 


arr + 50              


NumPy 還允許在數組上執行通用函數,如平方根函數、指數函數和三角函數等。


np.sqrt(arr)    
np.exp(arr)    
np.sin(arr)    
np.cos(arr)    
np.log(arr)    
np.sum(arr)    
np.std(arr)    


我們還可以在二維數組中抓取行或列的總和:


mat = np.arange(1,26).reshape(5,5)
mat.sum()        
mat.sum(axis=0)  
mat.sum(axis=1)  


現在,這篇 NumPy 教程進入了尾聲!希望對大家有所幫助。


原文連結:https://towardsdatascience.com/lets-talk-about-numpy-for-datascience-beginners-b8088722309f



本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

✄---

加入機器之心(全職記者/實習生):hr@jiqizhixin.com

投稿或尋求報導:editor@jiqizhixin.com

廣告&商務合作:bd@jiqizhixin.com

相關焦點

  • 入門|數據科學初學者必知的NumPy基礎知識
    本文介紹了一些 NumPy 基礎知識,適合數據科學初學者學習掌握。NumPy(Numerical Python)是 Python 中的一個線性代數庫。對每一個數據科學或機器學習 Python 包而言,這都是一個非常重要的庫,SciPy(Scientific Python)、Mat-plotlib(plotting library)、Scikit-learn 等都在一定程度上依賴 NumPy。對數組執行數學運算和邏輯運算時,NumPy 是非常有用的。
  • python數據科學系列:numpy入門詳細教程
    數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。本文知識要點一級菜單
  • 學習Python必知的Numpy函數
    背景Python的數據科學以分析為主。大量的擴展包是 Python 的一大特色,包括各種適用於數據分析的例程和函數。
  • 從numpy開啟Python數據科學之旅
    另一個路徑是按照數據科學的角度來學習Python,這條路徑是想將R語言的數據處理和分析能力搬到Python上,主要是學習一些可用於數據分析的Python庫,包括NumPy、Pandas、SciPy、Matplotlib、Seaborn和scikit-learn等等。    第一個路徑學習所使用的資料是廖雪峰老師Python3教程 廖雪峰Python3教程 。
  • 首發:適合初學者入門人工智慧的路線及資料下載
    本文為AI入門提供了一個簡易的學習路線,並提供了代碼和數據集下載。(黃海廣)一、前言AI以及機器學習入門,初學者遇到的問題非常多,但最大的問題就是:資料太多!!!看不完!!!不知道如何取捨!!!人的精力有限!!!
  • Numpy入門詳細教程
    numpy入門詳細教程python數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。nndarray和ufunc,其中前者是數據結構的基礎,後者是接口方法的基礎ufunc,通函數,其意義是可以像執行標量運算一樣執行數組運算,本質即是通過隱式的循環對各個位置依次進行標量運算。
  • python數據分析:numpy入門
    微信公眾號:學點啥玩點啥小白友好型python數據分析:numpy入門numpy:一個在python中做科學計算的基礎庫,重在數值計算,也是大部分python科學計算庫的基礎庫,多用於在大型、多維數組上執行數值計算。
  • Python 數據分析:NumPy 基礎知識
    簡介NumPy(Numerical Python)是一個開源的 Python 科學計算擴展庫,主要用來處理任意維度數組與矩陣,通常對於相同的計算任務,使用 NumPy 要比直接使用 Python 基本數據結構要簡單、高效的多。安裝使用 pip install numpy 命令即可。2.
  • 數據分析入門 | numpy基礎:數組和矢量計算
    本文是一篇對《利用Python進行數據分析》的學習筆記,如有錯誤,歡迎評論指正。注意:因為這是本人的第二次學習,所以一些關於numpy的基礎知識會跳過,想要全面學習的小夥伴可以關注我的公眾號,私信文末的關鍵詞獲取pdf版《利用Python進行數據分析》、本文相關代碼以及我個人推薦的相關博客。
  • numpy庫學習總結(基礎知識)
    最近在學習Python中OpenCV庫,學習花了很多時間,發現基礎知識很重要,尤其是numpy這個庫,在進行程序開發時,處理大量類似數組這種數據結構時,它的重要性等同於Python中的列表,像前篇我們寫的《使用Python中OpenCV庫創建一幅圖片的RGB通道圖片》中,對於圖片的處理
  • Python數據科學Numpy基礎20問
    1、什麼是numpy?一言以蔽之,numpy是python中基於數組對象的科學計算庫。提煉關鍵字,可以得出numpy以下三大特點:2、如何安裝numpy?因為numpy是一個python庫,所以使用python包管理工具pip或者conda都可以安裝。
  • python:numpy入門詳細教程
    數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。本文知識要點一級菜單
  • NumPy庫入門教程:基礎知識總結
    numpy可以說是Python運用於人工智慧和科學計算的一個重要基礎,近段時間恰好學習了numpy,pandas,sklearn等一些Python機器學習和科學計算庫,因此在此總結一下常用的用法。注意在numpy中,當某個軸的指定為-1時,此時numpy會根據實際的數組元素個數自動替換-1為具體的大小,如第二例,我們指明了c僅有一列,而b數組有12個元素,因此c被自動指定為12行1列的矩陣,即一個12維的列向量。當使用布爾數組b作為下標存取數組x中的元素時,將收集數組x中所有在數組b中對應下標為True的元素。
  • 數據系列教程之numpy( 三)
    數據分析系列教程之numpy( 一)數據分析系列教程之numpy(二)上周講了數據分析入門的前兩節,numpy
  • python數據分析專題 (9):numpy基礎
    NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。
  • 抖音入門基礎知識篇 抖音初學者入門教程
    1、保證直播時長和頻次規律 這是做抖音直播最基本的要求。 更多抖音入門知識加我微信領取,小編精心整理了這套針對零基礎學員的直播課程。加我好友,你可以獲得: 1:0基礎快速上手,實現變現 2:挖掘自身的優勢,快速找準自己的定位 3:結合自身性格和特徵進行人設的策劃,在粉絲心中留下深刻印象 4:掌握內容創作的套路,被粉絲持續關注的同時輕鬆帶貨 ,
  • SQL入門基礎知識詳解
    據媒體預測,數據分析將是未來最重要的工作技能之一。或許不久的將來,一家企業中80%的崗位,都需要數據分析的能力。可見,數據分析在各行各業中都展有著異常重要的地位,小到日常消費,大到行業決策。所以,目前數據分析崗位也在大幅度激增。
  • 資源|用Python和NumPy學習《深度學習》中的線性代數基礎
    本文系巴黎高等師範學院在讀博士 Hadrien Jean 的一篇基礎學習博客,其目的是幫助初學者/高級初學者基於深度學習和機器學習來掌握線性代數的概念。掌握這些技能可以提高你理解和應用各種數據科學算法的能力。
  • 【入門基礎】Numpy基礎20問
    一言以蔽之,numpy是python中基於數組對象的科學計算庫。提煉關鍵字,可以得出numpy以下三大特點:2、如何安裝numpy?n維數組(ndarray)對象,是一系列同類數據的集合,可以進行索引、切片、迭代操作。
  • 4個Python初學者必學的Numpy小技巧
    圖源:UnsplashPython初學者除了要掌握基礎知識外,了解一些小技巧、小竅門也是學習路上必不可少的一種催化劑,能幫助你更好的學習。下面小芯就基於實踐整理出了Python初學者應該學習的4個numpy技巧,它們能夠幫助你編寫更簡潔易讀的代碼。在學習numpy技巧之前,請確保已熟悉以下文章中的一些Python內置功能。1.