1. 收藏&下載 | 最全的NumPy 教程,沒有之一

        共 6427字,需瀏覽 13分鐘

         ·

        2022-05-27 13:47


        譯者:飛龍? ? ?鏈接:

        https://www.jianshu.com/p/57e3c0a92f3a

        原文:

        https://www.tutorialspoint.com/numpy/index.htm


        友情提示:本文較長,是教程的一部分,值得收藏,文末提供下載方式哦!覺得內容精彩一定要點一下“好看”哦!


        NumPy - 簡介

        NumPy 是一個 Python 包。它代表 “Numeric Python”。它是一個由多維數組對象和用于處理數組的例程集合組成的庫。


        Numeric,即 NumPy 的前身,是由 Jim Hugunin 開發(fā)的。也開發(fā)了另一個包 Numarray ,它擁有一些額外的功能。2005年,Travis Oliphant 通過將 Numarray 的功能集成到 Numeric 包中來創(chuàng)建 NumPy 包。這個開源項目有很多貢獻者。


        NumPy 操作


        使用NumPy,開發(fā)人員可以執(zhí)行以下操作:


        • 數組的算數和邏輯運算。

        • 傅立葉變換和用于圖形操作的例程。

        • 與線性代數有關的操作。NumPy 擁有線性代數和隨機數生成的內置函數。


        NumPy – MatLab 的替代之一


        NumPy 通常與?SciPy(Scientific Python)和?Matplotlib(繪圖庫)一起使用。這種組合廣泛用于替代 MatLab,是一個流行的技術計算平臺。但是,Python 作為 MatLab 的替代方案,現在被視為一種更加現代和完整的編程語言。


        NumPy 是開源的,這是它的一個額外的優(yōu)勢。


        NumPy - 環(huán)境


        在線嘗試


        我們已經在線設置了 NumPy 編程環(huán)境,以便在線編譯和執(zhí)行所有可用的示例。它向你提供了信心,并使您能夠使用不同的選項驗證程序, 隨意修改任何示例并在線執(zhí)行。


        使用我們的在線編譯器嘗試一下示例,它位于 CodingGround

        https://www.tutorialspoint.com/codingground.htm

        import numpy as np ?
        a = ?'hello world' ?
        print a

        對于本教程中給出的大多數示例,你會在我們的網站代碼部分的右上角找到一個Try it選項,這會把你帶到在線編譯器。所以快來使用它,享受你的學習吧。


        標準的 Python 發(fā)行版不會與 NumPy 模塊捆綁在一起。一個輕量級的替代方法是使用流行的 Python 包安裝程序?pip?來安裝 NumPy。

        pip install numpy

        啟用 NumPy 的最佳方法是使用特定于您的操作系統的可安裝的二進制包。這些二進制包含完整的 SciPy 技術棧(包括 NumPy,SciPy,matplotlib,IPython,SymPy 以及 Python 核心自帶的其它包)。


        NumPy - Ndarray 對象


        NumPy 中定義的最重要的對象是稱為?ndarray?的 N 維數組類型。它描述相同類型的元素集合??梢允褂没诹愕乃饕L問集合中的項目。


        ndarray中的每個元素在內存中使用相同大小的塊。?ndarray中的每個元素是數據類型對象的對象(稱為?dtype)。


        ndarray對象提取的任何元素(通過切片)由一個數組標量類型的 Python 對象表示。下圖顯示了ndarray,數據類型對象(dtype)和數組標量類型之間的關系。


        ndarray類的實例可以通過本教程后面描述的不同的數組創(chuàng)建例程來構造?;镜?code>ndarray是使用 NumPy 中的數組函數創(chuàng)建的,如下所示:

        numpy.array

        它從任何暴露數組接口的對象,或從返回數組的任何方法創(chuàng)建一個ndarray。

        numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

        上面的構造器接受以下參數:


        序號參數及描述
        1.object?任何暴露數組接口方法的對象都會返回一個數組或任何(嵌套)序列。
        2.dtype?數組的所需數據類型,可選。
        3.copy?可選,默認為true,對象是否被復制。
        4.order?C(按行)、F(按列)或A(任意,默認)。
        5.subok?默認情況下,返回的數組被強制為基類數組。如果為true,則返回子類。
        6.ndimin?指定返回數組的最小維數。

        看看下面的例子來更好地理解。

        示例 1

        import numpy as np
        a = np.array([1,2,3]) ?
        print a

        輸出如下:

        [1, 2, 3]

        示例 2

        # 多于一個維度 ?
        import numpy as np
        a = np.array([[1, ?2], ?[3, ?4]]) ?
        print a

        輸出如下:

        [[1, 2]
        [3, 4]]

        示例 3

        # 最小維度 ?
        import numpy as np
        a = np.array([1, ?2, ?3,4,5], ndmin = ?2) ?
        print a

        輸出如下:

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

        示例 4

        # dtype 參數 ?
        import numpy as np
        a = np.array([1, ?2, ?3], dtype = complex) ?
        print a

        輸出如下:

        [ 1.+0.j, ?2.+0.j, ?3.+0.j]

        **ndarray ** 對象由計算機內存中的一維連續(xù)區(qū)域組成,帶有將每個元素映射到內存塊中某個位置的索引方案。內存塊以按行(C 風格)或按列(FORTRAN 或 MatLab 風格)的方式保存元素。


        NumPy - 數據類型


        NumPy 支持比 Python 更多種類的數值類型。下表顯示了 NumPy 中定義的不同標量數據類型。


        序號數據類型及描述
        1.bool_?存儲為一個字節(jié)的布爾值(真或假)
        2.int_?默認整數,相當于 C 的long,通常為int32int64
        3.intc?相當于 C 的int,通常為int32int64
        4.intp?用于索引的整數,相當于 C 的size_t,通常為int32int64
        5.int8?字節(jié)(-128 ~ 127)
        6.int16?16 位整數(-32768 ~ 32767)
        7.int32?32 位整數(-2147483648 ~ 2147483647)
        8.int64?64 位整數(-9223372036854775808 ~ 9223372036854775807)
        9.uint8?8 位無符號整數(0 ~ 255)
        10.uint16?16 位無符號整數(0 ~ 65535)
        11.uint32?32 位無符號整數(0 ~ 4294967295)
        12.uint64?64 位無符號整數(0 ~ 18446744073709551615)
        13.float_?float64的簡寫
        14.float16?半精度浮點:符號位,5 位指數,10 位尾數
        15.float32?單精度浮點:符號位,8 位指數,23 位尾數
        16.float64?雙精度浮點:符號位,11 位指數,52 位尾數
        17.complex_?complex128的簡寫
        18.complex64?復數,由兩個 32 位浮點表示(實部和虛部)
        19.complex128?復數,由兩個 64 位浮點表示(實部和虛部)

        NumPy 數字類型是dtype(數據類型)對象的實例,每個對象具有唯一的特征。這些類型可以是np.bool_,np.float32等。


        數據類型對象 (dtype)


        數據類型對象描述了對應于數組的固定內存塊的解釋,取決于以下方面:


        • 數據類型(整數、浮點或者 Python 對象)

        • 數據大小

        • 字節(jié)序(小端或大端)

        • 在結構化類型的情況下,字段的名稱,每個字段的數據類型,和每個字段占用的內存塊部分。

        • 如果數據類型是子序列,它的形狀和數據類型。


        字節(jié)順序取決于數據類型的前綴<>。?<意味著編碼是小端(最小有效字節(jié)存儲在最小地址中)。?>意味著編碼是大端(最大有效字節(jié)存儲在最小地址中)。

        dtype可由一下語法構造:

        numpy.dtype(object, align, copy)

        參數為:


        • Object:被轉換為數據類型的對象。

        • Align:如果為true,則向字段添加間隔,使其類似 C 的結構體。

        • Copy:生成dtype對象的新副本,如果為flase,結果是內建數據類型對象的引用。


        示例 1

        # 使用數組標量類型 ?
        import numpy as np
        dt = np.dtype(np.int32) ?
        print dt

        輸出如下:

        int32

        示例 2

        #int8,int16,int32,int64 可替換為等價的字符串 'i1','i2','i4',以及其他。?
        import numpy as np

        dt = np.dtype('i4') ?
        print dt

        輸出如下:

        int32

        示例 3

        # 使用端記號 ?
        import numpy as np
        dt = np.dtype('>i4') ?
        print dt

        輸出如下:

        >i4

        下面的例子展示了結構化數據類型的使用。這里聲明了字段名稱和相應的標量數據類型。


        示例 4

        # 首先創(chuàng)建結構化數據類型。?
        import numpy as np
        dt = np.dtype([('age',np.int8)]) ?
        print dt

        輸出如下:

        [('age', 'i1')]

        示例 5

        # 現在將其應用于 ndarray 對象 ?
        import numpy as np

        dt = np.dtype([('age',np.int8)])
        a = np.array([(10,),(20,),(30,)], dtype = dt) ?
        print a

        輸出如下:

        [(10,) (20,) (30,)]

        示例 6

        # 文件名稱可用于訪問 age 列的內容 ?
        import numpy as np

        dt = np.dtype([('age',np.int8)])
        a = np.array([(10,),(20,),(30,)], dtype = dt) ?
        print a['age']

        輸出如下:

        [10 20 30]

        示例 7

        以下示例定義名為?student?的結構化數據類型,其中包含字符串字段name整數字段age浮點字段marks。此dtype應用于ndarray對象。

        import numpy as np
        student = np.dtype([('name','S20'), ?('age', ?'i1'), ?('marks', ?'f4')]) ?
        print student

        輸出如下:

        [('name', 'S20'), ('age', 'i1'), ('marks', ')]

        示例 8

        import numpy as np

        student = np.dtype([('name','S20'), ?('age', ?'i1'), ?('marks', ?'f4')])
        a = np.array([('abc', ?21, ?50),('xyz', ?18, ?75)], dtype = student) ?
        print a

        輸出如下:

        [('abc', 21, 50.0), ('xyz', 18, 75.0)]

        每個內建類型都有一個唯一定義它的字符代碼:

        • 'b':布爾值

        • 'i':符號整數

        • 'u':無符號整數

        • 'f':浮點

        • 'c':復數浮點

        • 'm':時間間隔

        • 'M':日期時間

        • 'O':Python 對象

        • 'S', 'a':字節(jié)串

        • 'U':Unicode

        • 'V':原始數據(void


        NumPy - 數組屬性


        這一章中,我們會討論 NumPy 的多種數組屬性。

        ndarray.shape

        這一數組屬性返回一個包含數組維度的元組,它也可以用于調整數組大小。

        示例 1

        import numpy as np
        a = np.array([[1,2,3],[4,5,6]]) ?
        print a.shape

        輸出如下:

        (2, 3)

        示例 2

        NumPy 也提供了reshape函數來調整數組大小。

        import numpy as np
        a = np.array([[1,2,3],[4,5,6]])
        b = a.reshape(3,2) ?
        print b

        輸出如下:

        [[1, 2]
        [3, 4]
        [5, 6]]

        NumPy - 切片和索引

        ndarray對象的內容可以通過索引或切片來訪問和修改,就像 Python 的內置容器對象一樣。


        如前所述,ndarray對象中的元素遵循基于零的索引。有三種可用的索引方法類型:字段訪問,基本切片高級索引。


        基本切片是 Python 中基本切片概念到 n 維的擴展。通過將start,stopstep參數提供給內置的slice函數來構造一個 Python slice對象。此slice對象被傳遞給數組來提取數組的一部分。

        示例 1

        import numpy as np
        a = np.arange(10)
        s = slice(2,7,2) ?
        print a[s]

        輸出如下:

        [2 ?4 ?6]

        在上面的例子中,ndarray對象由arange()函數創(chuàng)建。然后,分別用起始,終止和步長值2,72定義切片對象。當這個切片對象傳遞給ndarray時,會對它的一部分進行切片,從索引27,步長為2。

        通過將由冒號分隔的切片參數(start:stop:step)直接提供給ndarray對象,也可以獲得相同的結果。

        示例 2

        import numpy as np
        a = np.arange(10)
        b = a[2:7:2] ?
        print b

        輸出如下:

        [2 ?4 ?6]

        如果只輸入一個參數,則將返回與索引對應的單個項目。如果使用a:,則從該索引向后的所有項目將被提取。如果使用兩個參數(以:分隔),則對兩個索引(不包括停止索引)之間的元素以默認步驟進行切片。


        NumPy - 高級索引


        如果一個ndarray是非元組序列,數據類型為整數或布爾值的ndarray,或者至少一個元素為序列對象的元組,我們就能夠用它來索引ndarray。高級索引始終返回數據的副本。與此相反,切片只提供了一個視圖。


        有兩種類型的高級索引:整數和布爾值。


        整數索引


        這種機制有助于基于 N 維索引來獲取數組中任意元素。每個整數數組表示該維度的下標值。當索引的元素個數就是目標ndarray的維度時,會變得相當直接。

        以下示例獲取了ndarray對象中每一行指定列的一個元素。因此,行索引包含所有行號,列索引指定要選擇的元素。


        示例

        import numpy as np
        x = np.array([[ ?0, ?1, ?2],[ ?3, ?4, ?5],[ ?6, ?7, ?8],[ ?9, ?10, ?11]]) ?
        print ?'我們的數組是:' ?
        print x
        print ?'\n' ?
        # 切片
        z = x[1:4,1:3] ?
        print ?'切片之后,我們的數組變?yōu)椋? ?
        print z
        print ?'\n' ?
        # 對列使用高級索引
        y = x[1:4,[1,2]]
        print ?'對列使用高級索引來切片:' ?
        print y

        輸出如下:

        我們的數組是:
        [[ 0 ?1 ?2]
        [ 3 ?4 ?5]
        [ 6 ?7 ?8]
        [ 9 10 11]]
        切片之后,我們的數組變?yōu)椋?br>[[ 4 ?5]
        [ 7 ?8]
        [10 11]]
        對列使用高級索引來切片:
        [[ 4 ?5]
        [ 7 ?8]
        [10 11]]

        布爾索引

        當結果對象是布爾運算(例如比較運算符)的結果時,將使用此類型的高級索引。

        示例

        這個例子中,大于 5 的元素會作為布爾索引的結果返回。

        import numpy as np
        x = np.array([[ ?0, ?1, ?2],[ ?3, ?4, ?5],[ ?6, ?7, ?8],[ ?9, ?10, ?11]]) ?
        print ?'我們的數組是:' ?
        print x
        print ?'\n' ?
        # 現在我們會打印出大于 5 的元素 ?
        print ?'大于 5 的元素是:' ?
        print x[x > ?5]

        輸出如下:

        我們的數組是:
        [[ 0 ?1 ?2]
        [ 3 ?4 ?5]
        [ 6 ?7 ?8]
        [ 9 10 11]]
        大于 5 的元素是:
        [ 6 ?7 ?8 ?9 10 11]

        NumPy - 廣播

        術語廣播是指 NumPy 在算術運算期間處理不同形狀的數組的能力。對數組的算術運算通常在相應的元素上進行。如果兩個陣列具有完全相同的形狀,則這些操作被無縫執(zhí)行。

        示例

        import numpy as np

        a = np.array([1,2,3,4])
        b = np.array([10,20,30,40])
        c = a * b
        print c

        輸出如下:

        [10 ? 40 ? 90 ? 160]

        如果兩個數組的維數不相同,則元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以對形狀不相似的數組進行操作,因為它擁有廣播功能。較小的數組會廣播到較大數組的大小,以便使它們的形狀可兼容。

        如果滿足以下規(guī)則,可以進行廣播:


        • ndim較小的數組會在前面追加一個長度為 1 的維度。

        • 輸出數組的每個維度的大小是輸入數組該維度大小的最大值。

        • 如果輸入在每個維度中的大小與輸出大小匹配,或其值正好為 1,則在計算中可它。

        • 如果輸入的某個維度大小為 1,則該維度中的第一個數據元素將用于該維度的所有計算。


        如果上述規(guī)則產生有效結果,并且滿足以下條件之一,那么數組被稱為可廣播的


        • 數組擁有相同形狀。

        • 數組擁有相同的維數,每個維度擁有相同長度,或者長度為 1。

        • 數組擁有極少的維度,可以在其前面追加長度為 1 的維度,使上述條件成立。


        NumPy - 數組上的迭代


        NumPy 包包含一個迭代器對象numpy.nditer。它是一個有效的多維迭代器對象,可以用于在數組上進行迭代。數組的每個元素可使用 Python 的標準Iterator接口來訪問。


        讓我們使用arange()函數創(chuàng)建一個 3X4 數組,并使用nditer對它進行迭代。

        示例

        import numpy as np
        a = np.arange(0,60,5)
        a = a.reshape(3,4) ?
        print ?'原始數組是:' ?
        print a print ?'\n' ?
        print ?'修改后的數組是:' ?
        for x in np.nditer(a): ?
        ? ?print x,

        輸出如下:

        原始數組是:
        [[ 0 5 10 15]
        [20 25 30 35]
        [40 45 50 55]]
        修改后的數組是:
        0 5 10 15 20 25 30 35 40 45 50 55

        NumPy - 數組操作


        NumPy包中有幾個例程用于處理ndarray對象中的元素。它們可以分為以下類型:


        修改形狀


        序號形狀及描述
        1.reshape 不改變數據的條件下修改形狀
        2.flat 數組上的一維迭代器
        3.flatten 返回折疊為一維的數組副本
        4.ravel 返回連續(xù)的展開數組

        numpy.reshape

        這個函數在不改變數據的條件下修改形狀,它接受如下參數:

        numpy.reshape(arr, newshape, order)

        其中:

        • arr:要修改形狀的數組

        • newshape:整數或者整數數組,新的形狀應當兼容原有形狀

        • order'C'為 C 風格順序,'F'為 F 風格順序,'A'為保留原順序。


        例子

        import numpy as np
        a = np.arange(8)
        print '原始數組:'
        print a
        print '\n'
        b = a.reshape(4,2)
        print '修改后的數組:'
        print b

        輸出如下:

        原始數組:
        [0 1 2 3 4 5 6 7]

        修改后的數組:
        [[0 1]
        [2 3]
        [4 5]
        [6 7]]

        numpy.ndarray.flat

        該函數返回數組上的一維迭代器,行為類似 Python 內建的迭代器。

        例子

        import numpy as np
        a = np.arange(8).reshape(2,4)
        print '原始數組:'
        print a
        print '\n'
        print '調用 flat 函數之后:'
        # 返回展開數組中的下標的對應元素
        print a.flat[5]

        輸出如下:

        原始數組:
        [[0 1 2 3]
        [4 5 6 7]]
        調用 flat 函數之后:
        5

        numpy.ndarray.flatten

        該函數返回折疊為一維的數組副本,函數接受下列參數:

        ndarray.flatten(order)

        其中:

        • order'C'?-- 按行,'F'?-- 按列,'A'?-- 原順序,'k'?-- 元素在內存中的出現順序。

        例子

        import numpy as np
        a = np.arange(8).reshape(2,4)

        print '原數組:'
        print a
        print '\n' ?
        # default is column-major
        print '展開的數組:'
        print a.flatten()
        print '\n' ?
        print '以 F 風格順序展開的數組:'
        print a.flatten(order = 'F')

        輸出如下:

        原數組:
        [[0 1 2 3]
        [4 5 6 7]]
        展開的數組:
        [0 1 2 3 4 5 6 7]
        以 F 風格順序展開的數組:
        [0 4 1 5 2 6 3 7]

        numpy.ravel

        這個函數返回展開的一維數組,并且按需生成副本。返回的數組和輸入數組擁有相同數據類型。這個函數接受兩個參數。

        numpy.ravel(a, order)

        構造器接受下列參數:

        • order'C'?-- 按行,'F'?-- 按列,'A'?-- 原順序,'k'?-- 元素在內存中的出現順序。

        例子

        import numpy as np
        a = np.arange(8).reshape(2,4)

        print '原數組:'
        print a
        print '\n' ?
        print '調用 ravel 函數之后:'
        print a.ravel() ?
        print '\n'
        print '以 F 風格順序調用 ravel 函數之后:'
        print a.ravel(order = 'F')

        輸出如下:

        原數組:
        [[0 1 2 3]
        [4 5 6 7]]

        調用 ravel 函數之后:
        [0 1 2 3 4 5 6 7]

        以 F 風格順序調用 ravel 函數之后:
        [0 4 1 5 2 6 3 7]

        翻轉操作

        序號操作及描述
        1.transpose?翻轉數組的維度
        2.ndarray.T?和self.transpose()相同
        3.rollaxis?向后滾動指定的軸
        4.swapaxes?互換數組的兩個軸

        修改維度

        序號維度和描述
        1.broadcast?產生模仿廣播的對象
        2.broadcast_to?將數組廣播到新形狀
        3.expand_dims?擴展數組的形狀
        4.squeeze?從數組的形狀中刪除單維條目

        數組的連接

        序號數組及描述
        1.concatenate?沿著現存的軸連接數據序列
        2.stack?沿著新軸連接數組序列
        3.hstack?水平堆疊序列中的數組(列方向)
        4.vstack?豎直堆疊序列中的數組(行方向)

        數組分割

        序號數組及操作
        1.split?將一個數組分割為多個子數組
        2.hsplit?將一個數組水平分割為多個子數組(按列)
        3.vsplit?將一個數組豎直分割為多個子數組(按行)

        添加/刪除元素

        序號元素及描述
        1.resize 返回指定形狀的新數組
        2.append 將值添加到數組末尾
        3.insert 沿指定軸將值插入到指定下標之前
        4.delete 返回刪掉某個軸的子數組的新數組
        5.unique 尋找數組內的唯一元素


        NumPy - 位操作


        下面是 NumPy 包中可用的位操作函數。

        序號操作及描述
        1.bitwise_and 對數組元素執(zhí)行位與操作
        2.bitwise_or 對數組元素執(zhí)行位或操作
        3.invert 計算位非
        4.left_shift 向左移動二進制表示的位
        5.right_shift 向右移動二進制表示的位

        示例

        import numpy as np
        print '13 和 17 的二進制形式:'
        a,b = 13,17
        print bin(a), bin(b)
        print '\n'
        print '13 和 17 的位與:'
        print np.bitwise_and(13, 17)

        輸出如下:

        1317 的二進制形式:
        0b1101 0b10001

        1317 的位與:
        1

        你可以使用下表驗證此輸出。考慮下面的位與真值表。

        ABAND
        111
        100
        010
        000

        | ?| ?| 1 | 1 | 0 | 1 |
        | --- | --- |
        | AND |
        | | 1 | 0 | 0 | 0 | 1 |
        | result | 0 | 0 | 0 | 0 | 1 |


        NumPy - 字符串函數


        以下函數用于對dtypenumpy.string_numpy.unicode_的數組執(zhí)行向量化字符串操作。它們基于 Python 內置庫中的標準字符串函數。

        序號函數及描述
        1.add() 返回兩個strUnicode數組的逐個字符串連接
        2.multiply() 返回按元素多重連接后的字符串
        3.center() 返回給定字符串的副本,其中元素位于特定字符串的中央
        4.capitalize() 返回給定字符串的副本,其中只有第一個字符串大寫
        5.title() 返回字符串或 Unicode 的按元素標題轉換版本
        6.lower() 返回一個數組,其元素轉換為小寫
        7.upper() 返回一個數組,其元素轉換為大寫
        8.split() 返回字符串中的單詞列表,并使用分隔符來分割
        9.splitlines() 返回元素中的行列表,以換行符分割
        10.strip() 返回數組副本,其中元素移除了開頭或者結尾處的特定字符
        11.join() 返回一個字符串,它是序列中字符串的連接
        12.replace() 返回字符串的副本,其中所有子字符串的出現位置都被新字符串取代
        13.decode() 按元素調用str.decode
        14.encode() 按元素調用str.encode

        這些函數在字符數組類(numpy.char)中定義。較舊的 Numarray 包包含chararray類。numpy.char類中的上述函數在執(zhí)行向量化字符串操作時非常有用。

        示例

        import numpy as np
        print '連接兩個字符串:'
        print np.char.add(['hello'],[' xyz'])
        print '\n'
        print '連接示例:'
        print np.char.add(['hello', 'hi'],[' abc', ' xyz'])

        輸出如下:

        連接兩個字符串:
        ['hello xyz']

        連接示例:
        ['hello abc' 'hi xyz']

        NumPy - 算數函數

        很容易理解的是,NumPy 包含大量的各種數學運算功能。NumPy 提供標準的三角函數,算術運算的函數,復數處理函數等。

        三角函數

        NumPy 擁有標準的三角函數,它為弧度制單位的給定角度返回三角函數比值。

        舍入函數

        numpy.around()

        這個函數返回四舍五入到所需精度的值。該函數接受以下參數。

        numpy.around(a,decimals)

        其中:

        序號參數及描述
        1.a?輸入數組
        2.decimals?要舍入的小數位數。默認值為0。如果為負,整數將四舍五入到小數點左側的位置


        NumPy - 算數運算

        用于執(zhí)行算術運算(如add()subtract(),multiply()divide())的輸入數組必須具有相同的形狀或符合數組廣播規(guī)則。

        示例?

        import numpy as np
        a = np.arange(9, dtype = np.float_).reshape(3,3) ?
        print ?'第一個數組:' ?
        print a
        print ?'\n' ?
        print ?'第二個數組:'
        b = np.array([10,10,10]) ?
        print b
        print ?'\n' ?
        print ?'兩個數組相加:' ?
        print np.add(a,b) ?
        print ?'\n' ?
        print ?'兩個數組相減:' ?
        print np.subtract(a,b) ?
        print ?'\n' ?
        print ?'兩個數組相乘:' ?
        print np.multiply(a,b) ?
        print ?'\n' ?
        print ?'兩個數組相除:' ?
        print np.divide(a,b)

        輸出如下:

        第一個數組:
        [[ 0. 1. 2.]
        [ 3. 4. 5.]
        [ 6. 7. 8.]]

        第二個數組:
        [10 10 10]

        兩個數組相加:
        [[ 10. 11. 12.]
        [ 13. 14. 15.]
        [ 16. 17. 18.]]

        兩個數組相減:
        [[-10. -9. -8.]
        [ -7. -6. -5.]
        [ -4. -3. -2.]]

        兩個數組相乘:
        [[ 0. 10. 20.]
        [ 30. 40. 50.]
        [ 60. 70. 80.]]

        兩個數組相除:
        [[ 0. 0.1 0.2]
        [ 0.3 0.4 0.5]
        [ 0.6 0.7 0.8]]

        NumPy - 統計函數

        NumPy 有很多有用的統計函數,用于從數組中給定的元素中查找最小,最大,百分標準差和方差等。函數說明如下:

        numpy.amin()?和?numpy.amax()

        這些函數從給定數組中的元素沿指定軸返回最小值和最大值。

        numpy.ptp()

        numpy.ptp()函數返回沿軸的值的范圍(最大值 - 最小值)。

        numpy.percentile()

        百分位數是統計中使用的度量,表示小于這個值得觀察值占某個百分比。函數numpy.percentile()接受以下參數。

        numpy.percentile(a, q, axis)

        其中:

        序號參數及描述
        1.a?輸入數組
        2.q?要計算的百分位數,在 0 ~ 100 之間
        3.axis?沿著它計算百分位數的軸

        numpy.median()

        中值定義為將數據樣本的上半部分與下半部分分開的值。?numpy.median()函數的用法如下面的程序所示。

        numpy.mean()

        算術平均值是沿軸的元素的總和除以元素的數量。?numpy.mean()函數返回數組中元素的算術平均值。如果提供了軸,則沿其計算。

        numpy.average()

        加權平均值是由每個分量乘以反映其重要性的因子得到的平均值。?numpy.average()函數根據在另一個數組中給出的各自的權重計算數組中元素的加權平均值。該函數可以接受一個軸參數。如果沒有指定軸,則數組會被展開。

        考慮數組[1,2,3,4]和相應的權重[4,3,2,1],通過將相應元素的乘積相加,并將和除以權重的和,來計算加權平均值。

        加權平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)

        標準差

        標準差是與均值的偏差的平方的平均值的平方根。標準差公式如下:

        std = sqrt(mean((x - x.mean())**2))

        如果數組是[1,2,3,4],則其平均值為2.5。因此,差的平方是[2.25,0.25,0.25,2.25],并且其平均值的平方根除以4,即sqrt(5/4)1.1180339887498949。

        方差

        方差是偏差的平方的平均值,即mean((x - x.mean())** 2)。換句話說,標準差是方差的平方根。

        NumPy - 排序、搜索和計數函數


        NumPy中提供了各種排序相關功能。這些排序函數實現不同的排序算法,每個排序算法的特征在于執(zhí)行速度,最壞情況性能,所需的工作空間和算法的穩(wěn)定性。下表顯示了三種排序算法的比較。


        種類速度最壞情況工作空間穩(wěn)定性
        'quicksort'(快速排序)1O(n^2)0
        'mergesort'(歸并排序)2O(n*log(n))~n/2
        'heapsort'(堆排序)3O(n*log(n))0

        示例?

        import numpy as np ?
        a = np.array([[3,7],[9,1]]) ?
        print ?'我們的數組是:' ?
        print a
        print ?'\n' ?
        print ?'調用 sort() 函數:' ?
        print np.sort(a) ?
        print ?'\n' ?
        print ?'沿軸 0 排序:' ?
        print np.sort(a, axis = ?0) ?
        print ?'\n' ?
        # 在 sort 函數中排序字段
        dt = np.dtype([('name', ?'S10'),('age', ?int)])
        a = np.array([("raju",21),("anil",25),("ravi", ?17), ?("amar",27)], dtype = dt) ?
        print ?'我們的數組是:' ?
        print a
        print ?'\n' ?
        print ?'按 name 排序:' ?
        print np.sort(a, order = ?'name')

        輸出如下:

        我們的數組是:
        [[3 7]
        [9 1]]
        調用 sort() 函數:
        [[3 7]
        [1 9]]
        沿軸 0 排序:
        [[3 1]
        [9 7]]
        我們的數組是:
        [('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]
        按 name 排序:
        [('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]

        NumPy - 線性代數


        NumPy 包包含numpy.linalg模塊,提供線性代數所需的所有功能。此模塊中的一些重要功能如下表所述。


        序號函數及描述
        1.dot 兩個數組的點積
        2.vdot 兩個向量的點積
        3.inner 兩個數組的內積
        4.matmul 兩個數組的矩陣積
        5.determinant 數組的行列式
        6.solve 求解線性矩陣方程
        7.inv 尋找矩陣的乘法逆矩陣

        示例?

        import numpy.matlib
        import numpy as np

        a = np.array([[1,2],[3,4]])
        b = np.array([[11,12],[13,14]])
        np.dot(a,b)

        輸出如下:

        [[37 ?40]
        [85 ?92]]

        NumPy - Matplotlib


        Matplotlib 是 Python 的繪圖庫。它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案。它也可以和圖形工具包一起使用,如 PyQt 和 wxPython。


        Matplotlib 模塊最初是由 John D. Hunter 編寫的。自 2012 年以來,Michael Droettboom 是主要開發(fā)者。目前,Matplotlib 1.5.1 是可用的穩(wěn)定版本。該軟件包可以二進制分發(fā),其源代碼形式在 www.matplotlib.org 上提供。

        通常,通過添加以下語句將包導入到 Python 腳本中:

        from matplotlib import pyplot as plt

        這里pyplot()是 matplotlib 庫中最重要的函數,用于繪制 2D 數據。以下腳本繪制方程y = 2x + 5

        示例?

        import numpy as np
        from matplotlib import pyplot as plt

        x = np.arange(1,11)
        y = ?2 ?* x + ?5
        plt.title("Matplotlib demo")
        plt.xlabel("x axis caption")
        plt.ylabel("y axis caption")
        plt.plot(x,y)
        plt.show()

        ndarray對象xnp.arange()函數創(chuàng)建為x軸上的值。y軸上的對應值存儲在另一個數組對象y中。這些值使用matplotlib軟件包的pyplot子模塊的plot()函數繪制。

        圖形由show()函數展示。

        上面的代碼應該產生以下輸出:


        作為線性圖的替代,可以通過向plot()函數添加格式字符串來顯示離散值??梢允褂靡韵赂袷交址?。


        字符描述
        '-'實線樣式
        '--'短橫線樣式
        '-.'點劃線樣式
        ':'虛線樣式
        '.'點標記
        ','像素標記
        'o'圓標記
        'v'倒三角標記
        '^'正三角標記
        '<'左三角標記
        '>'右三角標記
        '1'下箭頭標記
        '2'上箭頭標記
        '3'左箭頭標記
        '4'右箭頭標記
        's'正方形標記
        'p'五邊形標記
        '*'星形標記
        'h'六邊形標記 1
        'H'六邊形標記 2
        '+'加號標記
        'x'X 標記
        'D'菱形標記
        'd'窄菱形標記
        `''`豎直線標記
        '_'水平線標記


        還定義了以下顏色縮寫。


        字符顏色
        'b'藍色
        'g'綠色
        'r'紅色
        'c'青色
        'm'品紅色
        'y'黃色
        'k'黑色
        'w'白色


        要顯示圓來代表點,而不是上面示例中的線,請使用ob作為plot()函數中的格式字符串。

        示例?

        import numpy as np
        from matplotlib import pyplot as plt

        x = np.arange(1,11)
        y = ?2 ?* x + ?5
        plt.title("Matplotlib demo")
        plt.xlabel("x axis caption")
        plt.ylabel("y axis caption")
        plt.plot(x,y,"ob")
        plt.show()

        上面的代碼應該產生以下輸出:


        繪制正弦波

        以下腳本使用 matplotlib 生成正弦波圖。

        示例?

        import numpy as np
        import matplotlib.pyplot as plt
        # 計算正弦曲線上點的 x 和 y 坐標
        x = np.arange(0, ?3 ?* np.pi, ?0.1)
        y = np.sin(x)
        plt.title("sine wave form") ?
        # 使用 matplotlib 來繪制點
        plt.plot(x, y)
        plt.show()


        subplot()

        subplot()函數允許你在同一圖中繪制不同的東西。在下面的腳本中,繪制正弦余弦值。

        示例?

        import numpy as np
        import matplotlib.pyplot as plt
        # 計算正弦和余弦曲線上的點的 x 和 y 坐標
        x = np.arange(0, ?3 ?* np.pi, ?0.1)
        y_sin = np.sin(x)
        y_cos = np.cos(x) ?
        # 建立 subplot 網格,高為 2,寬為 1 ?
        # 激活第一個 subplot
        plt.subplot(2, ?1, ?1) ?
        # 繪制第一個圖像
        plt.plot(x, y_sin)
        plt.title('Sine') ?
        # 將第二個 subplot 激活,并繪制第二個圖像
        plt.subplot(2, ?1, ?2)
        plt.plot(x, y_cos)
        plt.title('Cosine') ?
        # 展示圖像
        plt.show()

        上面的代碼應該產生以下輸出:


        bar()

        pyplot子模塊提供bar()函數來生成條形圖。以下示例生成兩組xy數組的條形圖。

        示例?

        from matplotlib import pyplot as plt
        x = ?[5,8,10]
        y = ?[12,16,6]
        x2 = ?[6,9,11]
        y2 = ?[6,15,7]
        plt.bar(x, y, align = ?'center')
        plt.bar(x2, y2, color = ?'g', align = ?'center')
        plt.title('Bar graph')
        plt.ylabel('Y axis')
        plt.xlabel('X axis')
        plt.show()

        NumPy - 使用 Matplotlib 繪制直方圖


        NumPy 有一個numpy.histogram()函數,它是數據的頻率分布的圖形表示。水平尺寸相等的矩形對應于類間隔,稱為bin,變量height對應于頻率。

        numpy.histogram()


        numpy.histogram()函數將輸入數組和bin作為兩個參數。?bin數組中的連續(xù)元素用作每個bin的邊界。

        import numpy as np

        a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]) ]
        np.histogram(a,bins = ?[0,20,40,60,80,100])
        hist,bins = np.histogram(a,bins = ?[0,20,40,60,80,100]) ?
        print hist
        print bins

        輸出如下:

        [3 4 5 2 1]
        [0 20 40 60 80 100]

        plt()

        Matplotlib 可以將直方圖的數字表示轉換為圖形。?pyplot子模塊的plt()函數將包含數據和bin數組的數組作為參數,并轉換為直方圖。

        from matplotlib import pyplot as plt
        import numpy as np ?

        a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
        plt.hist(a, bins = ?[0,20,40,60,80,100])
        plt.title("histogram")
        plt.show()

        輸出如下:


        瀏覽 27
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
          
          

            1. 日韩精品在线视频 | 91无码人妻一区二区成人aⅴ | 一区二区插插 | 国产精品国产三级国产普通话三级 | 一级性愛视频 |