柚子快報邀請碼778899分享:numpy
柚子快報邀請碼778899分享:numpy
0.1 Numpy介紹
NumPy(Numerical Python)是Python的?種開源的數(shù)值計算擴展。提供多維數(shù)組對象,各種派?對象(如掩碼數(shù)組和矩陣),這種?具可?來存儲和處理?型矩陣,?Python?身的嵌套列表(nested list structure)結(jié)構(gòu)要?效的多(該結(jié)構(gòu)也可以?來表示矩陣(matrix)),?持?量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供?量的數(shù)學函數(shù)庫,包括數(shù)學、邏輯、形狀操作、排序、選擇、輸?輸出、離散傅?葉變換、基本線性代數(shù),基本統(tǒng)計運算和隨機模擬等等。
0.1.1 Numpy的特點
提供了強大N維數(shù)組類型NDAarray 可以用來存儲任意維度的數(shù)據(jù); 集成了統(tǒng)計學、科學計算、線性代數(shù)、矩陣運算、矢量處理等算法 提供了成熟的?播功能和掩碼數(shù)組運算 提供了強大的隨機數(shù)?成功能
0.2 Numpy安裝
安裝 NumPy 最簡單的方法就是使用 pip 工具: pip3 install --user numpy scipy matplotlib –user 選項可以設(shè)置只安裝在當前的用戶下,而不是寫入到系統(tǒng)目錄。
默認情況使用國外線路,國外太慢,我們使用清華的鏡像就可以: pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
Linux 下安裝 Ubuntu & Debian sudo apt-get install python3-numpy python3-scipy python3-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
CentOS/Fedora sudo dnf install numpy scipy python-matplotlib ipython python-pandas sympy python-nose atlas-devel
Mac 系統(tǒng) Mac 系統(tǒng)的 Homebrew 不包含 NumPy 或其他一些科學計算包,所以可以使用以下方式來安裝: pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
相關(guān)鏈接 NumPy 官網(wǎng) http://www.numpy.org/ NumPy 源代碼:https://github.com/numpy/numpy SciPy 官網(wǎng):https://www.scipy.org/ SciPy 源代碼:https://github.com/scipy/scipy Matplotlib 教程:Matplotlib 教程 Matplotlib 官網(wǎng):https://matplotlib.org/ Matplotlib 源代碼:https://github.com/matplotlib/matplotlib
0.2.1安裝驗證
測試是否安裝成功: import numpy as np 為了使用方便,也為了風格的統(tǒng)一,一般在導(dǎo)入后將 numpy 取一個別名為np
0.3 Numpy數(shù)組對象ndarray
0.3.1 ndarray介紹
數(shù)組(Array):同類性數(shù)據(jù)元素按一定順序有序排列的集合稱為 數(shù)組 NumPy 最重要的一個特點是其 N 維數(shù)組對象 ndarray,它是一系 列數(shù)組疊加組成的N維數(shù)組; NumPy最核心的數(shù)據(jù)類型是N維數(shù)組(The N-Dimensional Array)ndarry。 數(shù)組和列表一樣,以 0 下標為開始進行索引
ndarray數(shù)組示意圖:
axis=0,表示沿著第 0 軸進行操作,即對每一列進行操作;axis=1,表示沿著第1軸進行操作,即對每一行進行操作。 在一維數(shù)組里axis=0表示x軸; 在二維數(shù)組里axis=1表示x軸,axis=0表示y軸; 在三位數(shù)組里axis=0表示y軸,axis=1表示x軸,axis=1表示z軸. 即:所見即所得。 axis=0 表示行(實際操作是列) axis=1 表示列(實際操作是行)
0.3.2. 一維數(shù)組、二維數(shù)組、三位數(shù)組之間的區(qū)別
實例: 假設(shè)某比賽分A,B,C三個組。每組有參賽者5名,分別來自15個不同的國家。 *一維數(shù)組 對于A組來說,一維數(shù)組相當于建立一個姓名列表 name =[‘參賽者A1’,‘參賽者A2’,…,‘參賽者A5’],列表里有5個元素,代表五個參賽者。 *二維數(shù)組 接著上面的,對于A組來說,二維數(shù)組相當于建立一個 姓名-國籍 數(shù)組 輸出的(5, 2)表示,5行2列。意思是五個參賽者除了姓名屬性外,還有國籍屬性。有幾個屬性就有幾列。相當于數(shù)據(jù)庫表里的字段,有幾個字段數(shù)據(jù)庫表就有幾列。 import numpy as np nameCountry= np.array([[‘參賽者A1’,‘國籍A1’], [‘參賽者A2’,‘國籍A2’], [‘參賽者A3’,‘國籍A3’], [‘參賽者A4’,‘國籍A4’], [‘參賽者A5’,‘國籍A5’]]) print(nameCountry) print(nameCountry.shape) 輸出為: [[‘參賽者A1’ ‘國籍A1’] [‘參賽者A2’ ‘國籍A2’] [‘參賽者A3’ ‘國籍A3’] [‘參賽者A4’ ‘國籍A4’] [‘參賽者A5’ ‘國籍A5’]] (5, 2) *三維數(shù)組 在上面兩個的基礎(chǔ)上。每組參賽者都有姓名-國籍屬性,有三組,就形成了三維數(shù)組。代碼如下: import numpy as np nameCountrys = np.array([ [[‘參賽者A1’,‘國籍A1’],[‘參賽者A2’,‘國籍A2’],[‘參賽者A3’,‘國籍A3’],[‘參賽者A4’,‘國籍A4’],[‘參賽者A5’,‘國籍A5’]], [[‘參賽者B1’,‘國籍B1’],[‘參賽者B2’,‘國籍B2’],[‘參賽者B3’,‘國籍B3’],[‘參賽者B4’,‘國籍B4’],[‘參賽者B5’,‘國籍B5’]], [[‘參賽者C1’,‘國籍C1’],[‘參賽者C2’,‘國籍C2’],[‘參賽者C3’,‘國籍C3’],[‘參賽者C4’,‘國籍C4’],[‘參賽者C5’,‘國籍C5’]] ]) print(nameCountrys) print(nameCountrys.shape) 輸出為: [[‘參賽者A1’ ‘國籍A1’] [‘參賽者A2’ ‘國籍A2’] [‘參賽者A3’ ‘國籍A3’] [‘參賽者A4’ ‘國籍A4’] [‘參賽者A5’ ‘國籍A5’]] (5, 2) [[[‘參賽者A1’ ‘國籍A1’] [‘參賽者A2’ ‘國籍A2’] [‘參賽者A3’ ‘國籍A3’] [‘參賽者A4’ ‘國籍A4’] [‘參賽者A5’ ‘國籍A5’]] [[‘參賽者B1’ ‘國籍B1’] [‘參賽者B2’ ‘國籍B2’] [‘參賽者B3’ ‘國籍B3’] [‘參賽者B4’ ‘國籍B4’] [‘參賽者B5’ ‘國籍B5’]] [[‘參賽者C1’ ‘國籍C1’] [‘參賽者C2’ ‘國籍C2’] [‘參賽者C3’ ‘國籍C3’] [‘參賽者C4’ ‘國籍C4’] [‘參賽者C5’ ‘國籍C5’]]] (3, 5, 2) 總結(jié):其實一維就是只有一個屬性,一種特征;二維就是有多個屬性,多個特征;三維即有多組,每組的屬性相同。
參數(shù)說明:
0.4 ndarray的創(chuàng)建
創(chuàng)建一個 ndarray 只需調(diào)用 NumPy 的 array 函數(shù)即可: numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) 實例 1 import numpy as np a = np.array([1,2,3]) print (a) 輸出結(jié)果如下: [1 2 3] 實例 2 多一個維度 import numpy as np a = np.array([[1, 2], [3, 4]]) print (a) 輸出結(jié)果如下: [[1 2] [3 4]] 實例 3 最小維度 import numpy as np a = np.array([1, 2, 3, 4, 5], ndmin = 2) print (a) 輸出結(jié)果如下: [[1 2 3 4 5]] 實例 4 dtype 參數(shù) import numpy as np a = np.array([1, 2, 3], dtype = complex) print (a) 輸出結(jié)果如下: [1.+0.j 2.+0.j 3.+0.j] ndarray 對象由計算機內(nèi)存的連續(xù)一維部分組成,并結(jié)合索引模式,將每個元素映射到內(nèi)存塊中的一個位置。內(nèi)存塊以行順序(C樣式)或列順序(FORTRAN或MatLab風格,即前述的F樣式)來保存元素。
0.4.1 python array和list區(qū)別
Python中的列表(list)和數(shù)組(array)主要有以下區(qū)別:
數(shù)據(jù)類型:列表可以包含不同類型的數(shù)據(jù),如數(shù)字、字符串、其他列表等,而數(shù)組通常用于存儲單一數(shù)據(jù)類型的元素。在Python的標準庫中,數(shù)組是數(shù)值型數(shù)據(jù)的集合,而列表是更通用的數(shù)據(jù)結(jié)構(gòu)。創(chuàng)建方式:列表是Python的內(nèi)置數(shù)據(jù)類型,可以直接使用方括號創(chuàng)建,如a = 。而數(shù)組通常需要導(dǎo)入標準庫(如NumPy)才能使用,例如import numpy as np后,可以使用np.array()函數(shù)創(chuàng)建數(shù)組。運算支持:列表不支持數(shù)學四則運算。而數(shù)組支持數(shù)學四則運算,特別適用于科學計算和需要高效數(shù)值處理的場景。性能和優(yōu)化:列表對于一般用途進行了優(yōu)化,適合存儲不同類型的元素,并提供了廣泛的內(nèi)置方法,如append()、remove()、insert()等。數(shù)組對數(shù)值計算進行了優(yōu)化,通常在進行大規(guī)模數(shù)值運算時性能更好,但不像列表那樣有豐富的內(nèi)置方法。數(shù)組支持與數(shù)值數(shù)據(jù)相關(guān)的額外操作,如數(shù)組類型轉(zhuǎn)換。內(nèi)存占用:列表中的每個元素都是一個獨立的Python對象,相對占用更多的內(nèi)存。而數(shù)組占用的內(nèi)存更少,因為它們僅存儲數(shù)值數(shù)據(jù),并以更緊湊的方式存儲。用途:列表適用于多種數(shù)據(jù)類型和靈活的數(shù)據(jù)集合操作。數(shù)組更適用于進行科學計算或其他需要高效數(shù)值處理的任務(wù)。在Python中,當你需要高效的數(shù)值運算并且所有元素類型都相同時,可以選擇使用array。而在需要存儲不同類型的數(shù)據(jù)或者不需要高效數(shù)值運算時,使用list會更加靈活。
綜上所述,列表和數(shù)組在Python中各有特點和應(yīng)用場景,選擇使用哪種數(shù)據(jù)結(jié)構(gòu)取決于具體的需求和上下文。 實例1: import numpy as np L1 = [1, 2, 3.14, 4] arr = np.array( (1, 2, ‘3.14’, 4) ) print(L1) # 列表可以存儲任意的數(shù)據(jù)類型 print(arr) 輸出結(jié)果如下: [1, 2, 3.14, 4] [‘1’ ‘2’ ‘3.14’ ‘4’] 實例2: import numpy as np L1=[11,22,33,44] L2=[100,200,300,400] L1+L2 #列表之間用"+"只能拼接,而不能相加 輸出結(jié)果如下: [11, 22, 33, 44, 100, 200, 300, 400] 實例3. 如果同一個變量名重復(fù)出現(xiàn),則以最后一個數(shù)組輸入的值為輸出值,之前輸入的不再輸出
arr2=np.array(L1) arr2 輸出結(jié)果如下: array([11, 22, 33, 44]) arr3=np.array(L2) arr3 輸出結(jié)果如下: array([100, 200, 300, 400]) 列表不支持數(shù)學四則運算,而數(shù)組支持數(shù)學四則運算 arr2+arr3 輸出結(jié)果如下: array([111, 222, 333, 444]) # 數(shù)組支持四則運算 arr2*arr3 輸出結(jié)果如下: array([ 1100, 4400, 9900, 17600]) arr2/arr3 輸出結(jié)果如下: array([0.11, 0.11, 0.11, 0.11]) list與ndarry加法示例: list與ndarry乘法示例
0.5 NumPy 創(chuàng)建數(shù)組
ndarray 數(shù)組除了可以使用底層 ndarray 構(gòu)造器來創(chuàng)建外,也可以通過以下幾種方式來創(chuàng)建。
0.5.1 創(chuàng)建相同值的數(shù)組
函數(shù): numpy.zeros_like(a, dtype=None, order=‘K’, subok=True, shape=None) numpy.ones_like(a, dtype=None, order=‘K’, subok=True, shape=None) ? 參數(shù) – shape: 指定形狀,整數(shù)或者整數(shù)序列 – dtype: 數(shù)據(jù)類型 1.1 創(chuàng)建指定大小的數(shù)組,數(shù)組元素以 0 來填充: numpy.zeros(shape, dtype = float, order = ‘C’) import numpy as np 默認為浮點數(shù) x = np.zeros(5) print(x) 設(shè)置類型為整數(shù) y = np.zeros((5,), dtype = int) print(y) 自定義類型 z = np.zeros((2,2), dtype = [(‘x’, ‘i4’), (‘y’, ‘i4’)]) print(z) 輸出結(jié)果為: [0. 0. 0. 0. 0.] [0 0 0 0 0] [[(0, 0) (0, 0)] [(0, 0) (0, 0)]] 1.2 np.zeros(10,dtype=int) 輸出結(jié)果為: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) np.zeros((2,5),dtype=int) 輸出結(jié)果為: array([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]) np.zeros((2,3,4),dtype=int) 輸出結(jié)果為: array([[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]) 注:. numpy.zeros_like *numpy.zeros_like 用于創(chuàng)建一個與給定數(shù)組具有相同形狀的數(shù)組,數(shù)組元素以 0 來填充。 numpy.zeros 和 numpy.zeros_like 都是用于創(chuàng)建一個指定形狀的數(shù)組,其中所有元素都是 0。 它們之間的區(qū)別在于:numpy.zeros 可以直接指定要創(chuàng)建的數(shù)組的形狀,而 numpy.zeros_like 則是創(chuàng)建一個與給定數(shù)組具有相同形狀的數(shù)組。 numpy.zeros_like(a, dtype=None, order=‘K’, subok=True, shape=None) import numpy as np 創(chuàng)建一個 3x3 的二維數(shù)組 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 創(chuàng)建一個與 arr 形狀相同的,所有元素都為 0 的數(shù)組 zeros_arr = np.zeros_like(arr) print(zeros_arr) 輸出結(jié)果為: [[0 0 0] [0 0 0] [0 0 0]]
2.1 創(chuàng)建指定形狀的數(shù)組,數(shù)組元素以 1 來填充: numpy.ones(shape, dtype = None, order = ‘C’) import numpy as np 默認為浮點數(shù) x = np.ones(5) print(x) 自定義類型 x = np.ones([2,2], dtype = int) print(x) 輸出結(jié)果為: [1. 1. 1. 1. 1.] [[1 1] [1 1]] 2.2 使用numpy.ones() 函數(shù),創(chuàng)建全為1的一維數(shù)組 np.ones(10) 輸出結(jié)果為: array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) 創(chuàng)建 2行 5列的二維數(shù)組,值是全為 0 的整數(shù) np.ones((2,5),dtype=int) 輸出結(jié)果為: array([[1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]) *numpy.ones_like numpy.ones_like 用于創(chuàng)建一個與給定數(shù)組具有相同形狀的數(shù)組,數(shù)組元素以 1 來填充。 numpy.ones 和 numpy.ones_like 都是用于創(chuàng)建一個指定形狀的數(shù)組,其中所有元素都是 1。 它們之間的區(qū)別在于:numpy.ones 可以直接指定要創(chuàng)建的數(shù)組的形狀,而 numpy.ones_like 則是創(chuàng)建一個與給定數(shù)組具有相同形狀的數(shù)組。 import numpy as np 創(chuàng)建一個 3x3 的二維數(shù)組 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 創(chuàng)建一個與 arr 形狀相同的,所有元素都為 1 的數(shù)組 ones_arr = np.ones_like(arr) print(ones_arr) 輸出結(jié)果為: [[1 1 1] [1 1 1] [1 1 1]] 3.1創(chuàng)建全為fill_value的數(shù)組 創(chuàng)建 2行 5列的二維數(shù)組,值是全為 5 的整數(shù) np.full((2,5),5,dtype=int) 輸出結(jié)果為: array([[5, 5, 5, 5, 5], [5, 5, 5, 5, 5]]) 0.5.2 根據(jù)已有數(shù)據(jù)創(chuàng)建相同維度的數(shù)組 函數(shù): 參數(shù) – object: 一個數(shù)組或形狀類似數(shù)組的結(jié)構(gòu),如列表等 – dtype: 數(shù)據(jù)類型 L5=([100,200,300],[400,500,600]) arr5=np.array(L5) arr5 輸出結(jié)果為: array([[100, 200, 300], [400, 500, 600]])
0.5.2 創(chuàng)建等差數(shù)列的一維數(shù)組
numpy 包中的使用 arange 函數(shù)創(chuàng)建數(shù)值范圍并返回 ndarray 對象,函數(shù)格式如下: numpy.arange(start, stop, step, dtype) 實例1: import numpy as np x = np.arange(5) print (x) 輸出結(jié)果如下: [0 1 2 3 4] 實例2: 設(shè)置返回類型位 float: import numpy as np 設(shè)置了 dtype x = np.arange(5, dtype = float) print (x) 輸出結(jié)果如下: [0. 1. 2. 3. 4.] 實例3: import numpy as np x = np.arange(10,20,2) print (x) 輸出結(jié)果如下: [10 12 14 16 18]numpy.linspace numpy.linspace 函數(shù)用于創(chuàng)建一個一維數(shù)組,數(shù)組是一個等差數(shù)列構(gòu)成的,格式如下: np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 實例1: import numpy as np a = np.linspace(1,10,10) print(a) 輸出結(jié)果為: [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] 實例2: 將 endpoint 設(shè)為 false,不包含終止值: import numpy as np a = np.linspace(10, 20, 5, endpoint = False) print(a) 輸出結(jié)果為: [10. 12. 14. 16. 18.] 實例3: 如果將 endpoint 設(shè)為 true,則會包含 10。 以下實例設(shè)置間距。 import numpy as np a =np.linspace(1,10,10,retstep= True) print(a) 拓展例子 b =np.linspace(1,10,10).reshape([10,1]) print(b) 輸出結(jié)果為: (array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0) [[ 1.] [ 2.] [ 3.] [ 4.] [ 5.] [ 6.] [ 7.] [ 8.] [ 9.] [10.]] 3. numpy.logspace numpy.logspace 函數(shù)用于創(chuàng)建一個于等比數(shù)列。格式如下: np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None) 實例1: import numpy as np 默認底數(shù)是 10 a = np.logspace(1.0, 2.0, num = 10) print (a) 輸出結(jié)果為: [ 10. 12.91549665 16.68100537 21.5443469 27.82559402 35.93813664 46.41588834 59.94842503 77.42636827 100. ] 實例2: 將對數(shù)的底數(shù)設(shè)置為 2 : import numpy as np a = np.logspace(0,9,10,base=2) print (a) 輸出結(jié)果為: [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
0.5.3 數(shù)據(jù)類型對象 (dtype)
type(“hello”) 輸出結(jié)果為: str
0.5.4 用隨機函數(shù)創(chuàng)建數(shù)組
Python中用于生成隨機數(shù)的主要庫是random。以下是一些常用的隨機函數(shù)及其使用示 例:
random.random():返回0到1之間的隨機浮點數(shù)。 import random print(random.random()) # 輸出類似于 0.3290365574660254 注:若設(shè)定特定的隨機種子值(即:seed),則多次運行后產(chǎn)生的隨機數(shù)是一致的;不設(shè)置隨機種子seed,則多次運行后產(chǎn)生的隨機數(shù)是不同的。生成10 個均勻分布的 0 ~ 1 之間的隨機小數(shù) np.random.rand(10) 輸出結(jié)果為: array([0.85369998, 0.25445758, 0.82786031, 0.49905511, 0.25214636, 0.60636842, 0.77064648, 0.55058426, 0.18577198, 0.3595078 ])生成 10 期望值 u 為 0,標準差為1的十個 正態(tài)分布的小數(shù) np.random.randn(10) 輸出結(jié)果為: array([-3.43323405e-04, 3.32578014e-01, 2.28620543e-01, -7.99316885e-01, 3.00933059e+00, 8.31727251e-01, -6.51723579e-01, 5.71336440e-01, 3.05262711e-01, 4.26792578e-01]) 生成 10 期望值 u 為 0,標準差為1的 2行5列 正態(tài)分布的小數(shù) np.random.randn(2,5) 輸出結(jié)果為: array([[-1.8159595 , -0.22650128, -0.34401613, 0.19192179, 2.12796067], [ 0.87400168, -0.33826335, -0.3707549 , -0.65123947, -0.51558185]])生成 模擬8次擲骰子的結(jié)果 np.random.randint(1,7,8) 輸出結(jié)果為: array([6, 5, 6, 2, 5, 4, 2, 1]) 生成 5 ~ 10 范圍內(nèi)均勻分布的8個隨機小數(shù) np.random.uniform(5,10,8) 輸出結(jié)果為: array([7.70652673, 6.55819735, 7.04376205, 7.82413751, 9.86539273, 8.86520164, 5.09117129, 5.20055258])模擬生成 10 個人的身高,期望值u是173厘米,標準差是5 np.random.normal(173,5,10) 輸出結(jié)果為: array([167.57184698, 177.98672723, 174.41489249, 165.46852643, 170.10699874, 181.25718269, 160.86660378, 170.85543686, 179.32968129, 168.66629799]) 均勻分布和正態(tài)分布:
0.5.5 ndarray數(shù)組屬性
ndarray.dtype 元素類型 ndarray.ndim 數(shù)組維度 ndarray.shape 數(shù)組形狀 ndarray.size 元素個數(shù) 等價于 len(list) ndarray數(shù)組屬性示例:
0.5.6 修改數(shù)組類型
修改數(shù)組類型示例
0.5.7 修改數(shù)組維度
arr.reshape(shape) 生成新形狀的數(shù)組并返回 arr.resize(shape) 不復(fù)制,改變當前數(shù)組形狀 numpy.ravel(ndarray) 展開數(shù)組,變成1維數(shù)組 參數(shù) – shape: 指定形狀,整數(shù)或者整數(shù)序列 – ndarray: ndarray 數(shù)組
0.5.8 ndarray的運算
數(shù)組對應(yīng)位置可以互相進行四則運算 運算符:+ - * / // % **
0.5.9 ndarray的廣播運算
當一個數(shù)組a與另外一個數(shù)組b 的維度不相同時。默認進行廣播運算 (broadcast)
0.5.10 ndarray的索引和切片運算
? ndarray對象的內(nèi)容可以通過索引或切片來訪問和修改,用法與Python 中 列表list 的索引和切片操作一樣。 ? 對于二維或者多維數(shù)組,索引和切片可以寫在一個中括號內(nèi)來一次性完 成。 ? 語法 一維數(shù)組[索引或切片] 二維數(shù)組[第一個維度(行)索引或切片, 第二個維度(列)索引或切片] 三維數(shù)組[第一個維度(頁), 第二個維度(行), 第三個維度(列)]
0.5.10.1一維數(shù)組的索引和切片示例:
實例: import numpy as np a = np.arange(10) s = slice(2,7,2) # 從索引 2 開始到索引 7 停止,間隔為2 print (a[s]) 輸出結(jié)果為: [2 4 6] 以上實例中,我們首先通過 arange() 函數(shù)創(chuàng)建 ndarray 對象。 然后,分別設(shè)置起始,終止和步長的參數(shù)為 2,7 和 2。 我們也可以通過冒號分隔切片參數(shù) start:stop:step 來進行切片操作: import numpy as np a = np.arange(10) b = a[2:7:2] # 從索引 2 開始到索引 7 停止,間隔為 2 print(b) 輸出結(jié)果為: [2 4 6]
0.5.10.2 二維數(shù)組的索引和切片示例
0.5.11 NumPy 高級索引
整數(shù)數(shù)組索引 整數(shù)數(shù)組索引是指使用一個數(shù)組來訪問另一個數(shù)組的元素。這個數(shù)組中的每個元素都是目標數(shù)組中某個維度上的索引值。 以下實例獲取數(shù)組中 (0,0),(1,1) 和 (2,0) 位置處的元素。 實例 import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) y = x[[0,1,2], [0,1,0]] print (y) 輸出結(jié)果為: [1 4 5] 以下實例獲取了 4X3 數(shù)組中的四個角的元素。 行索引是 [0,0] 和 [3,3],而列索引是 [0,2] 和 [0,2]。 import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print (‘我們的數(shù)組是:’ ) print (x) print (‘\n’) rows = np.array([[0,0],[3,3]]) cols = np.array([[0,2],[0,2]]) y = x[rows,cols] print (‘這個數(shù)組的四個角元素是:’) print (y) 輸出結(jié)果為: 我們的數(shù)組是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 這個數(shù)組的四個角元素是: [[ 0 2] [ 9 11]] 返回的結(jié)果是包含每個角元素的 ndarray 對象。 可以借助切片 : 或 … 與索引數(shù)組組合。如下面例子: 實例 import numpy as np a = np.array([[1,2,3], [4,5,6],[7,8,9]]) b = a[1:3, 1:3] c = a[1:3,[1,2]] d = a[…,1:] print(b) print? print(d) 輸出結(jié)果為: [[5 6] [8 9]] [[5 6] [8 9]] [[2 3] [5 6] [8 9]] 布爾索引 我們可以通過一個布爾數(shù)組來索引目標數(shù)組。 布爾索引通過布爾運算(如:比較運算符)來獲取符合指定條件的元素的數(shù)組。 以下實例獲取大于 5 的元素: 實例 import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print (‘我們的數(shù)組是:’) print (x) print (‘\n’) 現(xiàn)在我們會打印出大于 5 的元素 print (‘大于 5 的元素是:’) print (x[x > 5]) 輸出結(jié)果為: 我們的數(shù)組是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 大于 5 的元素是: [ 6 7 8 9 10 11] 以下實例使用了 ~(取補運算符)來過濾 NaN。 實例 import numpy as np a = np.array([np.nan, 1,2,np.nan,3,4,5]) print (a[~np.isnan(a)]) 輸出結(jié)果為: [ 1. 2. 3. 4. 5.] 以下實例演示如何從數(shù)組中過濾掉非復(fù)數(shù)元素。 實例 import numpy as np a = np.array([1, 2+6j, 5, 3.5+5j]) print (a[np.iscomplex(a)]) 輸出結(jié)果為: [2.0+6.j 3.5+5.j] 花式索引 花式索引指的是利用整數(shù)數(shù)組進行索引。 花式索引根據(jù)索引數(shù)組的值作為目標數(shù)組的某個軸的下標來取值。 對于使用一維整型數(shù)組作為索引,如果目標是一維數(shù)組,那么索引的結(jié)果就是對應(yīng)位置的元素,如果目標是二維數(shù)組,那么就是對應(yīng)下標的行。 花式索引跟切片不一樣,它總是將數(shù)據(jù)復(fù)制到新數(shù)組中。 一維數(shù)組 一維數(shù)組只有一個軸 axis = 0,所以一維數(shù)組就在 axis = 0 這個軸上取值: 實例 import numpy as np x = np.arange(9) print(x) #一維數(shù)組讀取指定下標對應(yīng)的元素 print(“-------讀取下標對應(yīng)的元素-------”) x2 = x[[0, 6]] # 使用花式索引 print(x2) print(x2[0]) print(x2[1]) 輸出結(jié)果為: [0 1 2 3 4 5 6 7 8] -------讀取下標對應(yīng)的元素------- [0 6] 0 6 二維數(shù)組 1、傳入順序索引數(shù)組 實例 import numpy as np x=np.arange(32).reshape((8,4)) print(x) #二維數(shù)組讀取指定下標對應(yīng)的行 print(“-------讀取下標對應(yīng)的行-------”) print (x[[4,2,1,7]]) print (x[[4,2,1,7]]) 輸出下表為 4, 2, 1, 7 對應(yīng)的行,輸出結(jié)果為: [[ 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]] -------讀取下標對應(yīng)的行------- [[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]] 傳入倒序索引數(shù)組 實例 import numpy as np x=np.arange(32).reshape((8,4)) print (x[[-4,-2,-1,-7]]) 輸出結(jié)果為: [[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4 5 6 7]] 3、傳入多個索引數(shù)組(要使用 np.ix_) np.ix_ 函數(shù)就是輸入兩個數(shù)組,產(chǎn)生笛卡爾積的映射關(guān)系。 笛卡爾乘積是指在數(shù)學中,兩個集合 X 和 Y 的笛卡爾積(Cartesian product),又稱直積,表示為 X×Y,第一個對象是X的成員而第二個對象是 Y 的所有可能有序?qū)Φ钠渲幸粋€成員。 例如 A={a,b}, B={0,1,2},則: A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)} B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)} 實例 import numpy as np x=np.arange(32).reshape((8,4)) print (x[np.ix_([1,5,7,2],[0,3,1,2])]) 輸出結(jié)果為: [[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]
0.5.12 ndarray的掩碼數(shù)組
什么是掩碼數(shù)組: ? 在許多情況下,數(shù)據(jù)集可能存在不完整或無效數(shù)據(jù),numpy引入掩碼數(shù) 組提供標記數(shù)據(jù)的方法,此方法在一個數(shù)組內(nèi)使用True/False類型的數(shù) 據(jù)可以標記數(shù)據(jù)是否有效。 ? 使用數(shù)組掩碼可以快速的對數(shù)據(jù)進行篩選和修改。 ndarray的掩碼數(shù)組示例
ndarray的掩碼數(shù)組的生成
0.5.12.1ndarray的掩碼數(shù)組的布爾運算
ndarray的掩碼數(shù)組的布爾運算示例1
ndarray的掩碼數(shù)組的布爾運算示例2
0.6 Numpy常用函數(shù)
0.6.1算數(shù)函數(shù)
算數(shù)函數(shù)示例1
0.6.2 統(tǒng)計函數(shù)
np.sum函數(shù)代碼示例 統(tǒng)計函數(shù)代碼示例1 統(tǒng)計函數(shù)代碼示例2
0.6.3 其他函數(shù)
where函數(shù)示例 apply_along_axis函數(shù)示例
0.7 numpy 其他參考鏈接
https://www.numpy.org.cn/user/basics/types.html https://www.runoob.com/numpy/numpy-tutorial.html
柚子快報邀請碼778899分享:numpy
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。