numpy 是否为零_一文看懂Numpy统计计算、数组比较
導讀:工欲善其事,必先利其器。此前,我們在《玩數據必備Python庫:Numpy使用詳解》一文中介紹了利用Numpy進行矩陣運算的方法,本文繼續介紹Numpy的統計計算及其他科學運算的方法。
作者:魏溪含 涂銘 張修鵬
如需轉載請聯系華章科技
01 Numpy的統計計算方法
NumPy內置了很多計算方法,其中最重要的統計方法及說明具體如下。
- sum():計算矩陣元素的和;矩陣的計算結果為一個一維數組,需要指定行或者列。
- mean():計算矩陣元素的平均值;矩陣的計算結果為一個一維數組,需要指定行或者列。
- max():計算矩陣元素的最大值;矩陣的計算結果為一個一維數組,需要指定行或者列。
- mean():計算矩陣元素的平均值。
- median():計算矩陣元素的中位數。
需要注意的是,用于這些統計方法的數值類型必須是int或者float。
數組示例代碼如下:
vector = numpy.array([5, 10, 15, 20])vector.sum()得到的結果是50
矩陣示例代碼如下:
matrix=array([[ 5, 10, 15], [20, 10, 30], [35, 40, 45]])matrix.sum(axis=1)array([ 30, 60, 120])matrix.sum(axis=0)array([60, 60, 90])如上述例子所示,axis = 1計算的是行的和,結果以列的形式展示。axis = 0計算的是列的和,結果以行的形式展示。
延伸學習:
官方推薦教程是不錯的入門選擇。
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
02 Numpy中的arg運算
argmax函數就是用來求一個array中最大值的下標。簡單來說,就是最大的數所對應的索引(位置)是多少。示例代碼如下:
index2 = np.argmax([1,2,6,3,2]) #返回的是2argmin函數可用于求一個array中最小值的下標,用法與argmax類似。示例代碼如下:
index2 = np.argmin([1,2,6,3,2]) #返回的是0下面我們來探索下Numpy矩陣的排序和如何使用索引,示例代碼如下:
import numpy as npx = np.arange(15)print(x) # array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])np.random.shuffle(x) #隨機打亂print(x) # array([ 8, 13, 12, 3, 9, 2, 10, 0, 11, 5, 14, 7, 1, 4, 6])sx = np.argsort(x) #從小到大排序,返回索引值print(sx) # [ 7 12 5 3 13 9 14 11 0 4 6 8 2 1 10]這里簡單解釋一下,第一個元素7代表的是x向量中的0的索引地址,第二個元素12代表的是x向量中的1的索引地址,其他元素以此類推。
03 FancyIndexing
要索引向量中的一個值是比較容易的,比如通過x[0]來取值。但是,如果想要更復雜地取數,比如,需要返回第3個、第5個以及第8個元素時,應該怎么辦?示例代碼如下:
import numpy as npx = np.arange(15)ind = [3,5,8]print(x[ind]) #使用fancyindexing就可以解決這個問題我們也可以從一維向量中構成新的二維矩陣,示例代碼如下:
import numpy as npx = np.arange(15)np.random.shuffle(x)ind = np.array([[0,2],[1,3]]) #第一行需要取x向量中索引為0的元素,以及索引為2的元素,第二行需要取x向量中索引為1的元素以及索引為3的元素print(x)print(x[ind])我們來看下輸出結果很容易就能明白了:
[ 3 2 7 12 9 13 11 14 10 5 4 1 6 8 0][[ 3 7] [ 2 12]]對于二維矩陣,我們使用fancyindexing取數也是比較容易的,示例代碼如下:
import numpy as npx = np.arange(16)X = x.reshape(4,-1)row = np.array([0,1,2])col = np.array([1,2,3])print(X[row,col]) #相當于取三個點,分別是(0,1),(1,2),(2,3)print(X[1:3,col]) #相當于取第2、3行,以及需要的列04 Numpy數組比較
Numpy有一個強大的功能是數組或矩陣的比較,數據比較之后會產生boolean值。示例代碼如下:
import numpy as npmatrix = np.array([ [5, 10, 15],[20, 25, 30],[35, 40, 45]])m = (matrix == 25)print(m)我們看到輸出的結果如下:
[[False False False] [False True False] [False False False]]下面再來看一個比較復雜的例子,示例代碼如下:
import numpy as npmatrix = np.array([[5, 10, 15],[20, 25, 30],[35, 40, 45] ])second_column_25 = (matrix[:,1] == 25)print(second_column_25)print(matrix[second_column_25, :])上述代碼中,print(second_column_25)輸出的是[False, True False],首先matrix[:,1]代表的是所有的行,以及索引為1的列,即[10,25,40],最后與25進行比較,得到的就是[False, True, False]。print(matrix[second_column_25, :])代表的是返回true值的那一行數據,即 [20, 25, 30]。
注意:上述的示例是單個條件,Numpy也允許我們使用條件符來拼接多個條件,其中“&”代表的是“且”,“|”代表的是“或”。比如,vector=np.array([5,10,11,12]), equal_to_five_and_ten = (vector == 5) & (vector == 10)返回的都是false,如果是equal_to_five_or_ten = (vector == 5) | (vector == 10),則返回的是[True,True,False,False]。
比較之后,我們就可以通過np.count_nonzero(x<=3)來計算小于等于3的元素個數了,1代表True,0代表False。也可以通過np.any(x == 0),只要x中有一個元素等于0就返回True。np.all(x>0)則需要所有的元素都大于0才返回True。這一點可以幫助我們判斷x里的數據是否滿足一定的條件。
關于作者:魏溪含 ,愛丁堡大學人工智能碩士,阿里巴巴達摩院算法專家,在計算機視覺、大數據領域有8年以上的算法架構和研發經驗。
涂銘,阿里巴巴數據架構師,對大數據、自然語言處理、圖像識別、Python、Java相關技術有深入的研究,積累了豐富的實踐經驗。
張修鵬,畢業于中南大學,阿里巴巴技術發展專家,長期從事云計算、大數據、人工智能與物聯網技術的商業化應用,在阿里巴巴首次將圖像識別技術引入工業,并推動圖像識別產品化、平臺化。
本文摘編自《深度學習與圖像識別:原理與實踐》,經出版方授權發布。
延伸閱讀《深度學習與圖像識別:原理與實踐》
推薦語:阿里巴巴達摩院算法專家、阿里巴巴技術發展專家、阿里巴巴數據架構師聯合撰寫,從技術原理、算法和工程實踐3個維度系統展開,既適合零基礎讀者快速入門,又適合有基礎讀者理解其核心技術;寫作方式上避開了艱澀的數學公式及其推導,深入淺出。
總結
以上是生活随笔為你收集整理的numpy 是否为零_一文看懂Numpy统计计算、数组比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CTF中遇到不知道文件类型_AE中你不知
- 下一篇: xlsxwriter 合并单元格_Pyt