日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习Numpy,看这篇文章就够啦

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习Numpy,看这篇文章就够啦 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


導讀:在數據分析當中,Python用到最多的第三方庫就是Numpy。本文內容是「大數據DT」內容合伙人王皓閱讀學習《Python 3智能數據分析快速入門》過后的思考和補充,結合這本書一起學習,效果更佳。

作者:王皓

來源:大數據DT(ID:hzdashuju)

01 ndarray創建與索引

在學習Numpy之前我們需要了解一個概念:數組維數

在計算機科學中,數組數據結構(array data structure),簡稱數組(Array),是由相同類型的元素的集合所組成的數據結構,分配一塊連續的內存來存儲。按數組維數分類可分為:一維數組、二維數組、多維數組(N維數組)。

Numpy是最著名的 Python庫之一,常用于高性能計算。Numpy提供了兩種基本對象:ndarray和ufunc。

NumPy作為一個開源的Python科學計算基礎庫,包含:一個強大的N維數組對象ndarray ;廣播功能函數 ;整合C/C++/Fortran代碼的工具 ;線性代數、傅里葉變換、隨機數生成等功能。NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎。

當然這里就有一個問題出現了,Python已有列表類型,為什么需要一個數組對象(類型)?

因為:

  • 數組對象可以去掉元素間運算所需的循環,使一維向量更像單個數據

  • 設置專門的數組對象,經過優化,可以提升這類應用的運算速度,在科學計算中,一個維度所有數據的類型往往相同

  • 數組對象采用相同的數據類型,有助于節省運算和存儲空間

  • 但是Python內置的array模塊既不支持多維數組功能,又沒有配套對應的計算函數,所以基于Numpy的ndarray在很大程度上改善了Python內置array模塊的不足,將重點介紹ndarray的創建與索引。

    1. 創建ndarray對象

    1)ndarray數據類型

    在《Python 3智能數據分析快速入門》該節內容中,作者羅列了15種數據類型,其中實數數據類型13種。這些實數數據類型之間可以互相轉換。

    這時有人會問,為什么要支持這么多種數據類型?是因為對比Python語法來說僅支持整數、浮點數和復數3種類型,但是當科學計算涉及數據較多,對存儲和性能都有較高要求,所以對數據類型進行精細定義,有助于NumPy合理使用存儲空間并優化性能和程序員對程序規模有合理評估。

    對于15種數據類型在這里筆者將不贅述,書上有詳細的解釋以及案例示范。

    2)ndarray創建

    在《Python 3智能數據分析快速入門》該節內容中,作者介紹了兩種創建ndarray的方法:

    • 使用array函數創建數ndarray

    • 使用arange函數創建數ndarray

    這里筆者再補充四種方法并整理出來:

  • 從Python中的列表、元組等類型創建ndarray數組

  • 使用NumPy中函數創建ndarray數組,如:arange, ones, zeros等

  • 從字節流(raw bytes)中創建ndarray數組

  • 從文件中讀取特定格式,創建ndarray數組

  • 對于方法②再補充5個常用函數:

    • np.full(shape,val):根據shape生成一個數組,每個元素值都是val

    • np.ones_like(a):根據數組a的形狀生成一個全1數組

    • np.zeros_like(a):根據數組a的形狀生成一個全0數組

    • np.full_like(a,val):根據數組a的形狀生成一個數組,每個元素值都是val

    • np.concatenate():將兩個或多個數組合并成一個新的數組

    3)隨機數

    Numpy提供了強大的生成隨機數的功能,使用隨機數也能創建ndarray。基本語法格式:numpy.random.×××() 。在《Python 3智能數據分析快速入門》該節內容中,作者羅列了13個函數及其說明,筆者再補充2個函數:

    • choice(a[,size,replace,p]):從一維數組a中以概率p抽取元素,形成size形狀新數組 replace表示是否可以重用元素,默認為False

    • poisson(lam,size):產生具有泊松分布的數組,lam隨機事件發生率,size形狀

    2. ndarray的索引和切片

    索引與切片是ndarray使用頻率最高的操作。相較于list,ndarray索引與切片在功能上更加豐富,在形式上更多樣。ndarray的高效率在很大程度上需歸功于其索引的易用性。

    1)一維ndarray的索引

    一維ndarray的索引方法很簡單,與list的索引方法一致,相關案例在書上有展示,這里不再贅述。

    2)多維ndarray的索引

    多維的每一個維度都有一個索引,各個維度的索引之間用逗號隔開,例如:arr[ [維度1(行)] , [維度2(列)] ]。

    代碼清單如下:

    import?numpy?as?np print(np.arange(10))

    輸出:[0 1 2 3 4 5 6 7 8 9]

    arrnp.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]]) print('\n',arr)

    輸出:

    [[ 1 2 3 4 5]

    [ 4 5 6 7 8]

    [ 7 8 9 10 11]]

    #訪問第0行中第3列和第4列元素 print('切片結果:',arr[0,3:5])

    輸出:

    切片結果:[4?5]

    #訪問第1行和第二行中第2列、第3列和第4列的元素 print('切片結果:\n',arr[1:,2:])

    輸出:

    切片結果:

    [6?7?8]

    [9?10?11]

    #訪問第2列的元素 print('切片結果:',arr[:2])

    輸出:

    切片結果:[3 6 9]

    ndarray在索引與切片的時候除了使用整形的數據外,還可以使用布爾型,代碼清單如下:

    #?索引第1、3行中第2列的元素。Define true 1, define false 0 mask=np.array([1,?0,?1],?dtype=np.bool) print(arr[mask,?1])

    輸出:

    [2?8]

    3)花式索引

    花式索引是一個Numpy術語,是在基礎索引方式之上衍生出的功能更強大的索引方式。它能夠利用整數ndarray進行索引。

    在這節的學習中,發現一個有趣的問題:在使用np.empty函數時,本想用arr = np.empty((4,7))創建一個空的多維數組,但是返回的結果是這樣:

    語法格式數值等都沒有什么錯誤的情況下,初步懷疑是函數本身的原因,于是用help()函數查看它的詳細介紹,竟然查到了:

    數據類型是可選且默認值是numpy.float64。(好家伙,書上可沒告訴我)所以只需在后面選擇int就行。

    arr?=?np.empty((4,7),int) print(arr)

    輸出:

    另一個問題是關于ix函數生成區域索引器的問題,代碼如下:

    arr?=?np.array([np.arange(i*4,?i*4+4)?for?i?in?np.arange(6)]) print('創建的二維ndarray arr為:\n',?arr)

    輸出:

    #利用np.ix函數將兩個一維的整數ndarray轉化為方形區域的索引器 print('使用ix成片索引arr結果為:\n',?arr[np.ix_([5,?1,?4,?2],?[3,?0,?1,?2])])

    輸出:

    out[15]為什么會返回這樣一個結果?是因為ix函數結果的排序是基于[5,1,4,2],[3,0,1,2]兩個數組產生的笛卡爾積,即(5,3),(5,0),(5,1),(5,2);(1,3),(1,0),(1,1),(1,2);(4,3),(4,0),(4,1),(4,2);(2,3),(2,0),(2,1),(2,2)。然后按照索引(5,3),(5,0),(5,1),(5,2)得到第0行元素:23 20 21 22,之后的以此類推。

    02 ndarray的基礎操作

    ndarray的基礎操作包括設置ndarray形狀、展平ndarray、組合ndarray、分割ndarray、ndarray的排序與搜索,以及ndarray的字符串操作等。

    • 設置ndarray形狀

    書中已經介紹了12種基本函數和它們的代碼演示:

    • 通過reshape方法改變ndarray形狀

    • 通過resize方法改變ndarray形狀

    • 通過修改shape屬性改變ndarray維度

    • 使用ravel方法展平ndarray

    • 使用flatten方法展平ndarray

    • 使用hstack函數實現ndarray橫向組合

    • 使用vstack函數實現ndarray縱向組合

    • 使用concatenate函數組合ndarray

    • 使用dstack函數組合ndarray

    • 使用hsplit函數實現ndarray橫向分割

    • 使用vsplit函數實現ndarray縱向分割

    • 使用split函數分割ndarray

    • 使用dsplit函數實現ndarray深度分割

    在這里做幾點補充和說明:

    • .swapaxes(ax1,ax2):將數組n個維度中兩個維度進行調換

    • .astype(new_type):一定會創建新的數組(原始數據的一個拷貝),即使兩個類型一致

    • .tolist( ):將數組或者矩陣轉換成列表

    但請注意深度分割函數dsplit的使用條件:

    import?numpy?as?np arr=np.arange(12) arr.shape?=?(4,?3) print('\n',?arr)

    輸出:

    [[ 0 1 2]

    [ 3 4 5]

    [ 6 7 8]

    [ 9 10 11]]

    print('形狀改變后,?ndarray?arr的維度為:',arr.ndim)

    輸出:

    形狀改變后,ndarray arr的維度為:2

    ''' dsplit分割的ndarray必須是三維ndarray, 且分割的數目必須為shape屬性中下標為2的值的公約數。 比如這里的分割數就是36,下標為2的值是4,符合要求 ''' arr?=?np.arange(36).reshape(3,3,4) print('創建的三維ndarrary?arr為:\n',arr)

    創建的三維 ndarrary arr為:

    [[[ 0 1 2 3]

    [ 4 5 6 7]

    [ 8 9 10 11]]

    [[ 12 13 14 15]

    [ 16 17 18 19]

    [ 20 21 22 23]]

    [[ 24 25 26 27]

    [ 28 29 30 31]

    [ 32 33 34 35]]]

    1. 排序與搜索

    書中已經介紹了6種基本函數和它們的代碼演示:

    • 使用sort函數進行排序

    • 使用argsort函數進行排序

    • 使用argmax和argmin函數進行搜索

    • 使用where函數無x與y

    • 使用where函數有x與y

    • 使用extract函數進行搜索

    在這里做幾點補充和說明:

    其中注意argsort函數使用的方法類似于sort,只是返回的值不同,返回的是ndarray arr的下標。

    2. 字符串操作

    Numpy的char模塊提供的字符串操作函數可以運用向量化運算來處理整個ndarray,而完成同樣的任務,Python的列表則通常借助循環語句遍歷列表,并對逐個元素進行相應的處理。

    Numpy的char模塊提供的常用字符串操作函數具有字符串的連接、切片、刪除、替換、字母大小寫轉換和編碼調用等功能,可謂是十分方便,書上有非常詳細的介紹,建議大家結合《Python 3智能數據分析快速入門》這本書美味食用。

    03 ufunc

    ufunc,全稱通用函數(universal function),是一種能夠對ndarray中所有元素進行操作的函數,而不是對ndarray對象操作。

    • ufunc的廣播機制

    廣播(Broadingcasting)是指不同形狀的ndarray之間執行算術運算的方式。若兩個ndarray的shape不一致,Numpy則會實行廣播機制。為了更好地使用廣播機制,需要遵循4個原則。原則及案例在書上第159頁有詳細演示,此處不再贅述。

    • 常用ufunc

    常用的ufunc運算有算數運算、三角函數、集合運算、比較運算、邏輯運算和統計計算等。書上提供了若干種常用函數,對ndarray中所有元素的運算來說,在提供了極其方便與快捷的同時,又囊括一切強大的功能。相關函數及案例在書上第161頁有詳細演示,此處不再贅述。

    04 matrix與線性代數

    Numpy的matrix是繼承自Numpy的二維ndarray對象,不僅擁有二維ndarray的屬性、方法與函數,還擁有諸多特有的屬性與方法。同時,Numpy中的matrix與線性代數中的矩陣概念幾乎完全相同,同樣含有轉置矩陣、共軛矩陣、逆矩陣等概念。

    只要是大學期間學過《線性代數》這門課程的同學,對于《Python 3智能數據分析快速入門》的學習完全沒有問題,相關專業術語及技術實現細節在本節中都有強調。詳情請從第169頁開始學習。

    05 Numpy文件讀寫

    讀寫文件是利用Numpy進行數據處理的基礎,Numpy中主要有二進制的文件讀寫和文件列表形式的數據讀寫兩種形式。其中二進制文件讀取使用書上第175頁中提到的load函數;二進制文件存儲使用save和savez函數。

    但是在實際的數據分析任務中,更多使用文本格式的數據,如txt或csv,因此經常使用loadtxt函數執行對文本格式的數據的讀取任務和savetxt函數執行對文本格式的數據的存儲任務。

    但是它們只能有效存取一維和二維數據,這里我再對多維數據的存取的方法進行補充:

    a.tofile(frame, sep='', format='%s')

    • frame:文件、字符串

    • sep:數據分割字符串,如果是空串,寫入文件為二進制

    • format:寫入數據的格式

    np.fromfile(frame, dtype=float, count=‐1, sep='')

    • frame:文件、字符串

    • dtype:讀取的數據類型

    • count:讀入元素個數,‐1表示讀入整個文件

    • sep:數據分割字符串,如果是空串,寫入文件為二進制

    需要注意的是,該方法需要讀取時知道存入文件時數組的維度和元素類型,a.tofile()和np.fromfile()需要配合使用,可以通過元數據文件來存儲額外信息。

    06 小結

    本章重點介紹了Numpy數值計算重要的基礎內容,主要包含如下6部分內容。

  • ndarray基礎知識,包括ndarray的屬性與創建方法。

  • ndarray使用的切片和索引方法,改變ndarray形狀的方式,ndarray的排序、搜索與字符串操作等。

  • ufunc的廣播功能及常用的ufunc,包括算術運算函數、三角函數、集合運算函數、比較運算函數、邏輯運算函數和統計計算函數等。

  • 矩陣的創建、屬性及基本運算。

  • Numpy中二進制的文件讀寫和文件列表形式的數據讀寫。

  • 參考文獻:

    1. 《Python 3智能數據分析快速入門》 李明江、張良均、周東平、張尚佳 著,機械工業出版社出版。

    2.中國大學MOOC,《Python數據分析與展示》作者:嵩天 。

    3.百度百科:數組維數

    4.CSDN:《花式索引與np.ix_函數》TzeSing 著

    5.CSDN:《關于np.empty()函數的用法》愛數據的橙子 著

    關于作者:王皓,一名就讀于北京石油化工學院大數據管理與應用專業的同學,熱愛并致力于學習Python語言及相關應用領域。大數據DT內容合伙人。

    延伸閱讀《Python3智能數據分析快速入門》

    點擊上圖了解及購買

    轉載請聯系微信:DoctorData

    推薦語:本書假設你有一定的數據分析基礎,但是沒有Python和AI基礎,為了幫助你快速掌握智能數據分析需要的技術和方法,書中有針對性地講解了Python和AI中必須要掌握的知識點,內容由淺入深,循序漸進。從環境配置、基本語法、基礎函數到第三方庫的安裝與使用,對各個操作步驟、函數、工具、代碼示例等的講解非常詳盡,確保所有滿足條件的讀者都能快速入門。

    大數據DT內容合伙人上線啦!

    最近,你都在讀什么書?有哪些心得體會想要跟大家分享?

    數據叔最近搞了個大事——聯合優質圖書出版商機械工業出版社華章公司發起鑒書活動。

    簡單說就是:你可以免費讀新書,你可以免費讀新書的同時,順手碼一篇讀書筆記就行。詳情請在大數據DT公眾號后臺對話框回復合伙人查看。

    劃重點????

    干貨直達????

    • 世界一流大學的計算機專業,在用哪些書當教材?

    • 從CPU到GPU,Nvidia就這樣成為AI時代的大贏家

    • 初學者指南:什么是算法?11行偽代碼給你講明白

    • 6個案例手把手教你用Python和OpenCV進行圖像處理

    更多精彩????

    在公眾號對話框輸入以下關鍵詞

    查看更多優質內容!

    PPT?|?讀書?|?書單?|?硬核?|?干貨?|?講明白?|?神操作

    大數據?|?云計算?|?數據庫?|?Python?|?可視化

    AI?|?人工智能?|?機器學習?|?深度學習?|?NLP

    5G?|?中臺?|?用戶畫像?|?1024?|?數學?|?算法?|?數字孿生

    據統計,99%的大咖都完成了這個神操作

    ????

    總結

    以上是生活随笔為你收集整理的学习Numpy,看这篇文章就够啦的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。