Python NumPy面向數組的編程(附詳細代碼)

2021-01-11 人工智慧研究院

NumPy是用於高性能數組實現的最受歡迎的Python庫:

數組操作比列表操作快得多,列表操作在大數據世界中可能會擴大運行時的差異。根據librarys.io(截至2020年4月),超過4千的圖書館依賴NumPy,包括最受歡迎的數據科學軟體包Pandas和SciPy。

NumPy的不同之處在於它提供的面向數組的編程風格。即代替使用條件for循環來處理所述陣列元件(或嵌套的for循環,當涉及到n維時),它提供了函數式、矢量化與內部迭代,使該陣列的操作更為便捷。

在本文中,你將發現從全部初學者到高級的10多個綜合主題所涵蓋的知識。但是,如果你已經掌握了,就可以直接跳到最後兩個部分(「 進階」和「高階教程」),其中將介紹陣列方向的「難題」以及基本的性能提示。到最後,能夠將過程編程的樣式優化,基於數組的樣式,能夠達到快速而無循環的效果。

數組創建

導入NumPy之後import numpy as np,我們就可以滾動了:

一維

我們可以通過傳遞一個元素列表來創建一個數組。在此示例中,整數:

array = np.array([1, 2, 3, 5, 8, 13, 21])

能在輸出中注意到一些有趣的東西嗎?

所有逗號分隔的值均具有相同的寬度並右對齊。由於最大數量21佔據2個位置,因此所有其他值都被格式化為兩個字符的欄位。所以現在您知道為什麼[和1.之間有一個前置空格。

多維

我們將通過傳遞兩個三個元素的嵌套列表來創建一個2行3列的數組:

array2x3 = np.array([[1, 2, 3], [10, 20, 30]])

輸出的格式基於維數,將每一行中的列對齊:如我們所見,1和10是對齊的,2和20等。

數組的形狀

我們可以使用shape屬性確定數組的形狀,該屬性返回具有尺寸的元組:

以及帶有ndim屬性的維數(即數組的秩),如下所示:

的ndim是相同的軸的數量或長度(len在陣列的形狀的輸出的):

元素數

使用該屬性,size我們可以獲得數組的元素總數:

元素類型和元素大小

由於NumPy用C編寫,因此使用其數據類型。這樣,整數將作為int64值存儲-對應於C中的64位(即8位元組)整數。

通過訪問dtype屬性,可以輕鬆確定數組的元素類型:

通過訪問以下命令以及存儲每個元素所需的字節數itemsize:

itemsize:

記憶體大小

內存佔用量(nbytes)是元素數乘以字節數。

通用數組

來填充特定值的數組,NumPy的提供三個特殊功能:

zeros,ones和full,分別創建包含0,1,或在指定值的陣列。請注意,零和一包含float64值,但是我們顯然可以自定義元素類型。

一維0數組: zeros = np.zeros(5)

一維0s數組,類型為整數: zeros_int = np.zeros(5, dtype = int)

1秒的2D數組(2x5): ones = np.ones((2, 5))

2s的2D數組(2x5): full = np.full((2, 5), 7)

均勻分布的範圍

NumPy提供了用於從範圍創建數組的優化功能。創建均勻間隔範圍的兩個最重要的函數分別是arange和linspace,分別用於整數和浮點數。

In整數:給定間隔

np.arange(start, stop, step):在半開間隔[start, stop)(即包括開始但不包括停止的間隔)內生成值。默認start值為0,默認step大小為1。

範圍從0到4,增量為1:np.arange(5)

範圍從5到9,增量為1:np.arange(5, 10)

範圍從2到8,增量為2:np.arange(2, 10, 2)

範圍從8到2,以-2為增量:np.arange(8, 0, -2)

F浮點數:給定元素數量

np.linspace(start, stop, num, endpoint):返回num間隔上計算得出的均勻間隔的樣本[start, stop]。所述endpoint的時間間隔的可任選地被排除。默認num值為50,默認endpoint值為True。

5個均勻間隔的元素,範圍從1.0到2.0(不包括2.0):np.linspace(1, 2, num = 5, endpoint = False)

從1.0到2.0(包括2.0)的5個等距元素:np.linspace(1, 2, num = 5, endpoint = True)

儘管我們可將範圍作為參數傳遞的方式來創建數組,但還是選擇內置函數,因為它們針對性能進行了優化。

Random隨機整數

np.random.randint(low, high, size):從low(包括)到high(不包括)返回隨機整數。如果high為None(默認值),則結果來自[0, low)。

從1到99的10個隨機整數:np.random.randint(low = 1, high = 100, size = 10)

相關焦點

  • Python學習第113課——numpy中用條件判斷去篩選數組中的元素
    【每天幾分鐘,從零入門python編程的世界!】之前我們學習了如何在numpy中查找數組元素的方法和技巧,現在我們學習如何用條件判斷的方式篩選數組的元素。●numpy中的數組可以直接進行比較直接上代碼:運行結果:我們看到,condition列印出來,它的結構和h的結構一樣。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。
  • Python學習第119課——numpy中的broadcasting
    【每天幾分鐘,從零入門python編程的世界!】這節課我們學習numpy中的數據的一個多變的特性--broadcasting,broadcasting的官方的說明比較麻煩,我們這裡把它簡化一下,就把它當做「腦補」的意思。我們舉例來說明。
  • Python學習第114課——numpy中ndarray的四則運算
    【每天幾分鐘,從零入門python編程的世界!】我們為什麼要學習numpy?numpy其實就是number+Python的簡寫,意思就是通過Python對數據進行處理。要對數據進行處理,就少不了最基本的加減乘除等操作。
  • Python學習第117課——numpy中dot的運用舉例
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了最基礎的matrix的運算,可能有小夥伴覺得這都要涉及高等數學知識了,確實如果你想做數據科學、做人工智慧,統計學、概率論等數學知識,尤其是算法是繞不過去的坎,但是不要怕!!!
  • Python數據分析類庫系列-Numpy之多維數組ndarray
    比起Python的內置序列,NumPy數組使用的內存更少。 NumPy可以在整個數組上執行複雜的計算,而不需要Python的for循環。-- ndarray NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。
  • python數據科學系列:numpy入門詳細教程
    本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。本文知識要點一級菜單numpy:numerical python縮寫,提供了底層基於C語言實現的數值計算庫,與python內置的list和array數據結構相比,其支持更加規範的數據類型和極其豐富的操作接口,速度也更快num
  • Python編程:如何規範numpy中數組元素的列印輸出格式
    引言對於Python語言開發者,如果你經常處理大量數據運算的話,numpy是一個必不可少的程序擴展庫,它支持大維度數組與矩陣運算,提供了非常豐富的數學運算函數,並且,相對於Python自身提供的列表類型,它在運算速度上有著無與倫比的優勢。
  • Numpy入門詳細教程
    >numpy入門詳細教程python數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。
  • 好程式設計師Python培訓分享numpy簡介
    好程式設計師Python培訓分享numpy簡介:一、numpy簡介:NumPy是一個功能強大的Python庫,主要用於對多維數組執行計算。NumPy這個詞來源於兩個單詞-- Numerical和Python。NumPy提供了大量的庫函數和操作,可以幫助程式設計師輕鬆地進行數值計算。
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構成一個強大的類似於Matlab的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?
  • 如果不懂Numpy,請別說自己是Python程式設計師
    了解 numpy之後,我才想明白當初磁層頂的三維模型之所以慢,是因為使用了 list(python 數組)而不是 ndarray(numpy 數組)存儲數據。有了 numpy,python 程式設計師才有可能寫出媲美 C 語言運行速度的代碼。
  • Python入門教程(二):Numpy數組基礎
    本文代碼已經整理到百度網盤,領取方式詳見文末!Python中的數組操作幾乎等同於Numpy數組操作,今天我們會展示用Numpy數組操作獲取數據或者子數組,對數組進行分裂,變形和連接的例子。import numpy as npnp.random.seed(0)  # 設置隨機種子數,保證程序執行時每次都可以生成同樣的隨機數組x1 = np.random.randint(10, size=6)  # 一維數組x2 = np.random.randint(10, size=(3, 4))  # 二維數組,創建三行四列的數組
  • 值得收藏的 NumPy 小抄表(含主要語法、代碼)
    實現的科學計算的擴展程序庫,包括:3、用於整合C/C++和Fortran代碼的工具包;4、實用的線性代數、傅立葉變換和隨機數生成函數。numpNumPy(Numeric Python)提供了許多高級的數值編程工具,如:矩陣數據類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而產生。多為很多大型金融公司使用,以及核心的科學計算組織如:Lawrence Livermore,NASA用其處理一些本來使用C++,Fortran或Matlab等所做的任務。本文整理了一個Numpy的小抄表,總結了Numpy的常用操作,可以收藏慢慢看。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    list VS ndarraynumpy 的核心是 ndarray 對象(numpy 數組),它封裝了 python 原生的同數據類型的 n 維數組(python 數組)。numpy 數組和 python 數組之間有幾個重要的區別:numpy 數組一旦創建,其元素數量就不能再改變了。增刪 ndarray 元素的操作,意味著創建一個新數組並刪除原來的數組。
  • Python使用ctypes模塊調用DLL函數之複數數組的參數傳遞
    這次的例子運行環境配置如下:① 作業系統:win7 64位② Python版本:python2.7.14③ 函數約定的調用方式:C調用(cdecl)方式。下面給出具體的實現過程。函數說明在DLL文件(MyDLL.dll)中設計一個函數ComplexArrayFunc,其功能是,對於輸入長度為n的複數數組x,將x數組中的每個複數元素的實部和虛部進行交換,得到同樣長度的複數數組y。該函數的聲明如下圖所示:函數ComplexArrayFunc的具體C語言實現代碼如下:下面給出Python中轉為numpy數組的調用方法。
  • 詳解:Python 取numpy數組的某幾行某幾列方法(含對與錯示例)
    詳解:Python 取numpy數組的某幾行某幾列方法(含對與錯示例) 今天為大家帶來的內容是Python 取numpy數組的某幾行某幾列方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,要是喜歡的話記得點讚轉發收藏不迷路哦!!!
  • opencv-python獲取圖像:面向對象與面向過程
    下面是分別用面向過程與面向對象的編程方法實現讀取本地圖像和打開攝像頭兩段代碼:# -*- coding: utf-8 -*-"""面向過程的編程方法,用函數把解決問題的步驟一步一步實現。運行環境:win10系統 python==3.6 opencv-contrib-python== 4.1.0第一行「# -*- coding: utf-8 -*-」 告訴Python解釋器,按照UTF-8編碼讀取原始碼"""import cv2image=cv2.imread('lena.JPG') #讀取本地圖片,