Numpy統計計算、數組比較,看這篇就夠了

2021-12-30 大數據DT

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])        

argmin函數可用於求一個array中最小值的下標,用法與argmax類似。示例代碼如下:

index2 = np.argmin([1,2,6,3,2]) 

下面我們來探索下Numpy矩陣的排序和如何使用索引,示例代碼如下:

import numpy as np
x = np.arange(15)
print(x)    
np.random.shuffle(x)    
print(x)    
sx = np.argsort(x)    
print(sx)    

這裡簡單解釋一下,第一個元素7代表的是x向量中的0的索引地址,第二個元素12代表的是x向量中的1的索引地址,其他元素以此類推。

03 FancyIndexing

要索引向量中的一個值是比較容易的,比如通過x[0]來取值。但是,如果想要更複雜地取數,比如,需要返回第3個、第5個以及第8個元素時,應該怎麼辦?示例代碼如下:

import numpy as np
x = np.arange(15)
ind = [3,5,8]
print(x[ind]) 

我們也可以從一維向量中構成新的二維矩陣,示例代碼如下:

import numpy as np
x = np.arange(15)
np.random.shuffle(x)
ind = np.array([[0,2],[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 np
x = np.arange(16)
X = x.reshape(4,-1)
row = np.array([0,1,2])
col = np.array([1,2,3])
print(X[row,col])        
print(X[1:3,col])        

04 Numpy數組比較

Numpy有一個強大的功能是數組或矩陣的比較,數據比較之後會產生boolean值。示例代碼如下:

import numpy as np
matrix = 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 np
matrix = 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裡的數據是否滿足一定的條件。

相關焦點

  • Numpy數組中的運算與拼接,看這篇就夠了...
    在Numpy中當數組進行運算時,如果兩個數組的形狀相同,那麼兩個數組相加就是兩個數組的對應位相加,這是要求維數相加,並且各維度的長度相同。,numpy將會自動觸發廣播機制,那什麼是廣播機制呢?我們一起來看一張圖
  • 看圖學NumPy:掌握n維數組基礎知識點,看這一篇就夠了
    np.allclose假設所有的比較數字的等級是1個單位。例如在上圖中,它就認為1e-9和2e-9相同,如果要進行更細緻的比較,需要通過atol指定比較等級1:np.allclose(1e-9, 2e-9, atol=1e-17) == False。
  • 學習Numpy,看這篇文章就夠啦
    數組對象可以去掉元素間運算所需的循環,使一維向量更像單個數據設置專門的數組對象,經過優化,可以提升這類應用的運算速度,在科學計算中,一個維度所有數據的類型往往相同數組對象採用相同的數據類型,有助於節省運算和存儲空間但是Python內置的array模塊既不支持多維數組功能,又沒有配套對應的計算函數,所以基於Numpy的ndarray在很大程度上改善了Python內置array模塊的不足,將
  • Python之numpy數組學習(一)
    In [3]: import numpy as npIn [4]: a = np.arange(5)In [5]: a.dtypeOut[5]: dtype('int32')上面數組的數據類型為int32,這一般跟你安裝的Python版本有關。不過我安裝的是64位,不知道怎麼回事這裡是int32,後面再檢查下。
  • Numpy基礎:數組和矢量計算(開篇)
    一起學習,一起cheng zhngNumpy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。ndarray,一個具有矢量算術運算和複雜廣播能力的快速且節省空間的多維數組。數據分析主要關注的功能:用於數據整理和清理、子集構造和過濾、轉換等快速的矢量化數組運算。常用的數組算法,如排序、唯一化、集合運算等等。高效的描述統計和數據聚合/摘要運算。用於異構數據集的合併/連接運算的數據對齊和關係型數據運算。將條件邏輯表達為數組表達式(而不是帶有if-elif-else分支的循環)。數據的分組運算(聚合、轉換、函數應用等)。
  • 數據分析入門 | numpy基礎:數組和矢量計算
    注意:因為這是本人的第二次學習,所以一些關於numpy的基礎知識會跳過,想要全面學習的小夥伴可以關注我的公眾號,私信文末的關鍵詞獲取pdf版《利用Python進行數據分析》、本文相關代碼以及我個人推薦的相關博客。
  • 利用Numpy統計成績
    描述利用附件中的成績數據進行成績統計,根據輸入的同學的名字
  • Python之numpy數組學習(三)
    作者  Airy本文轉自AiryData,轉載需授權前面我們學習了numpy庫的簡單應用和數組的處理,今天來學習下比較重要的如何拆分數組。下面看一下代碼(建議訪問原文連結查看規範代碼):#-*- coding:utf-8 -*-import numpy as npa = np.arange(9).reshape(3, 3)print (a)#Out: #array([[0, 1, 2],#       [3, 4, 5],#
  • NumPy完整剖析篇
    np.float64)print(arr1.dtype) dtype是NumPy如此強大和靈活的原因之一,多數情況下,它們直接映射到相應的機器表示,這使得"讀寫磁碟上的二進位數據流"以及"集成低級語言代碼"等工作變得更加簡單。
  • 數值計算模塊numpy
    Numpy(Numerical Python)是科學計算基礎庫,提供大量科學計算相關功能,比如數據統計,隨機數生成等,其提供最核心類型為多維數組類型(ndarray),支持大量的維度數組與矩陣運算,numpy支持向量處理ndarray對象,提高程序運算速度。
  • 圖解NumPy,這一篇就夠了
    這就是為什麼將小數部分加到步驟arange通常是一個不太好的方法:我們可能會遇到一個bug,導致數組的元素個數不是我們想要的數,這會降低代碼的可讀性和可維護性。這時候,linspace會派上用場。它不受捨入錯誤的影響,並始終生成要求的元素數。
  • 使用Python玩轉數據分析(4):掌握NumPy數組及基礎運算
    數學運算庫可以讓我們擺脫諸如向量運算、矩陣運算、基本統計運算等複雜的數學運算,無需為這些複雜的數學運算編寫運算代碼,而是把精力用到數據分析過程中。1、  安裝NumPyNumPy是Python中科學計算的基礎軟體包,它提供了眾多數學運算工具,這些數學運算工具包括:線性代數中的矩陣和向量運算、傅立葉變換、多維數組運算、數據統計運算以及豐富的數學函數庫。
  • Python數據科學計算庫的安裝和numpy簡單
    Numpy是一個基礎性的Python庫,為我們提供了常用的數值數組和函數。Scipy是Python的科學計算庫,對Numpy的功能進行了擴充,同時也有部分功能是重合的。Numpy和Scipy曾經共享過基礎代碼。
  • Numpy 使用簡介
    source: https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial聲明:本篇推送的主要內容翻譯自:https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial
  • 使用NumPy 讓你的 Python 科學計算更高效
    使用numpy可以使python的計算效率更高。NumPy 數組存儲在一個均勻連續的內存塊中。這樣數組計算遍歷所有的元素,不像列表 list 還需要對內存地址進行查找,從而節省了計算資源。因為數據連續的存儲在內存中,NumPy 直接利用現代 CPU 的矢量化指令計算,加載寄存器中的多個連續浮點數。另外 NumPy 中的矩陣計算可以採用多線程的方式,充分利用多核 CPU 計算資源,大大提升了計算效率。具體的原理我也不大懂,簡單理解就是Numpy的計算效率更高一些。
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構成一個強大的類似於Matlab的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?
  • Python之numpy數組學習(四)——索引和視圖
    在學習ravel()函數的時候,我看到了視圖的概念,這讓我很驚訝,但是注意,這裡的視圖和資料庫中的視圖不是一樣的。在numpy中,視圖不是只讀的。關鍵在於,當前處理的是共享的數組視圖,還是數組數據的副本。舉例來說,可以取數組的一部分來生成視圖,這意味著,如果先將數組的某部分賦值給一個變量,然後修改原數組中相應位置的數據,那麼這個變量的值也會隨之變化。
  • 整體操作numpy數組的方法
    下面我們就來看看整體操作numpy數組的一些常用方法和經典案例。 numpy數組支持與標量的加、減、乘、除和冪等算術運算,計算結果為一個新數組,其元素為標量與原數組每個元素進行計算的結果。(1)形狀相同的數組進行算術運算。可以對兩個形狀相同的numpy數組進行算術運算,得到一個新數組,其元素的值為原來的兩個數組中對應位置上元素進行運算的結果。
  • Python數據分析之numpy數組全解析
    1 什麼是numpy2 numpy數組創建2.1 基本方法:np.array()2.2 通用方法:np.ones()、np.zeros()、np.eye()2.3 讀取外部數據3 numpy中數組的數據類型4 numpy中數組的形狀5 索引與切片5.1 按索引取值
  • 數據分析-numpy庫快速了解
    1.numpy是什麼庫NumPy是一個開源的Python科學計算基礎庫,包含: 一個強大的N維數組對象 ndarray 廣播功能函數 整合C/C++/Fortran代碼的工具 線性代數、傅立葉變換、隨機數生成等功能