Numpy | 17 統計函數

NumPy 提供了不少統計函數,用於從數組中查找最小元素,最大元素,百分位標準差和方差等。數組

 帶軸向就是計算整行或整列的最大值和最小值,不帶軸向,就是整個數組的最大值和最小值函數

numpy.amin() 和 numpy.amax()

numpy.amin() 用於計算數組中的元素沿指定軸的最小值。spa

numpy.amax() 用於計算數組中的元素沿指定軸的最大值。code

import numpy as np

a = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])
print('咱們的數組是:')
print(a)
print('\n')

print('調用 amin() 函數:')
print(np.amin(a, 1))
print('\n')

print('再次調用 amin() 函數:')
print(np.amin(a, 0))
print('\n')

print('調用 amax() 函數:')
print(np.amax(a, 1))
print('\n')

print('再次調用 amax() 函數:')
print(np.amax(a, axis=0))
print('\n')

print('整個數組中最大和最小值爲:')
print(np.amin(a),np.amax(a))

輸出結果爲:blog

咱們的數組是:
[[3 7 5]
[8 4 3]
[2 4 9]]排序


調用 amin() 函數:
[3 3 2]it


再次調用 amin() 函數:
[2 4 3]io


調用 amax() 函數:
[7 8 9]function

 

再次調用 amax() 函數:
[8 7 9]class


整個數組中最大和最小值爲:
2 9

 

numpy.ptp()

  numpy.ptp()函數計算數組中元素最大值與最小值的差(最大值 - 最小值)。

The name of the function comes from the acronym for 'peak to peak'

 

import numpy as np

a = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])
print('a數組:')
print(a)
print('\n')

print('調用 ptp() 函數:',np.ptp(a))
print('沿軸 1 調用 ptp() 函數:',np.ptp(a, axis=1))
print('沿軸 0 調用 ptp() 函數:',np.ptp(a, axis=0))

輸出結果爲:

a數組:
[[3 7 5]
[8 4 3]
[2 4 9]]


調用 ptp() 函數: 7
沿軸 1 調用 ptp() 函數: [4 5 7]
沿軸 0 調用 ptp() 函數: [6 3 6]

 

numpy.percentile()

  百分位數是統計中使用的度量,表示小於這個值的觀察值的百分比。 

numpy.percentile(a, q, axis)

參數說明:

  • a: 輸入數組
  • q: 要計算的百分位數,在 0 ~ 100 之間
  • axis: 沿着它計算百分位數的軸

首先明確百分位數:

第 p 個百分位數是這樣一個值,它使得至少有 p% 的數據項小於或等於這個值,且至少有 (100-p)% 的數據項大於或等於這個值。

舉個例子:高等院校的入學考試成績常常以百分位數的形式報告。好比,假設某個考生在入學考試中的語文部分的原始分數爲 54 分。相對於參加同一考試的其餘學生來講,他的成績如何並不容易知道。可是若是原始分數54分剛好對應的是第70百分位數,咱們就能知道大約70%的學生的考分比他低,而約30%的學生考分比他高。這裏的 p = 70。

import numpy as np

a = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])
p1 = np.percentile(a, 50)
p2 = np.percentile(a, 50, axis=1)
p3 = np.percentile(a, 50, axis=0)

print("a數組:\n",a,"\n")

print("p1:", p1)
print("p2:", p2)
print("p3:", p3)

輸出結果:

a數組:
[[10 20 30]
[40 50 60]
[70 80 90]]

 

p1: 50.0
p2: [20. 50. 80.]
p3: [40. 50. 60.]

 

import numpy as np

a = np.array([[10, 7, 4], [3, 2, 1]])
print('a數組是:')
print(a)
print ('\n')


print('調用 percentile() 函數:',np.percentile(a, 50))              # 50% 的分位數,就是 a 裏排序以後的中位數
print('縱列調用 percentile() 函數:',np.percentile(a, 50, axis=0)) # axis 爲 0,在縱列上求
print('橫行調用 percentile() 函數:',np.percentile(a, 50, axis=1)) # axis 爲 1,在橫行上求
print ('\n')

print('橫行調用 percentile() 函數,保持維度不變:')
print(np.percentile(a, 50, axis=1, keepdims=True))                  # 保持維度不變

輸出結果爲:

a數組是:
[[10 7 4]
[ 3 2 1]]


調用 percentile() 函數: 3.5
縱列調用 percentile() 函數: [6.5 4.5 2.5]
橫行調用 percentile() 函數: [7. 2.]


橫行調用 percentile() 函數,保持維度不變:
[[7.]
[2.]]

 

numpy.median()

numpy.median() 函數用於計算數組 a 中元素的中位數(中值)

import numpy as np 
 
a = np.array([[30,65,70],[80,95,10],[50,90,60]])  

print ('咱們的數組是:')
print (a)
print ('\n')

print ('調用 median() 函數:')
print (np.median(a))
print ('\n')

print ('沿軸 0 調用 median() 函數:')
print (np.median(a, axis =  0))
print ('\n')

print ('沿軸 1 調用 median() 函數:')
print (np.median(a, axis =  1))

輸出結果爲:

咱們的數組是: [[30 65 70] [80 95 10] [50 90 60]] 調用 median() 函數: 65.0 沿軸 0 調用 median() 函數: [50. 90. 60.] 沿軸 1 調用 median() 函數: [65. 80. 60.]

numpy.mean()

numpy.mean() 函數返回數組中元素的算術平均值。 若是提供了軸,則沿其計算。

算術平均值是沿軸的元素的總和除以元素的數量。

import numpy as np 
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print ('咱們的數組是:')
print (a)
print ('\n')

print ('調用 mean() 函數:')
print (np.mean(a))
print ('\n')

print ('沿軸 0 調用 mean() 函數:')
print (np.mean(a, axis =  0))
print ('\n')

print ('沿軸 1 調用 mean() 函數:')
print (np.mean(a, axis =  1))

輸出結果爲:

咱們的數組是: [[1 2 3] [3 4 5] [4 5 6]] 調用 mean() 函數: 3.6666666666666665 沿軸 0 調用 mean() 函數: [2.66666667 3.66666667 4.66666667] 沿軸 1 調用 mean() 函數: [2. 4. 5.]

numpy.average()

numpy.average() 函數根據在另外一個數組中給出的各自的權重計算數組中元素的加權平均值

該函數能夠接受一個軸參數。 若是沒有指定軸,則數組會被展開。

 

加權平均值即將各數值乘以相應的權數,而後加總求和獲得整體值,再除以總的單位數。

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

 
加權平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)
 
import numpy as np

a = np.array([1, 2, 3, 4])
print('咱們的數組是:')
print(a)
print('\n')

print('不指定權重,調用 average() 函數:',np.average(a))   # 不指定權重時至關於 mean 函數

wts = np.array([4, 3, 2, 1])
print('指定權重後,調用 average() 函數:',np.average(a, weights=wts))


# 若是 returned 參數設爲 true,同時返回權重的和
print('returned=True,調用 average() 函數:',)
print(np.average([1, 2, 3, 4], weights=[4, 3, 2, 1], returned=True))    # 權重和:4+3+2+1=10

輸出結果爲:

咱們的數組是:
[1 2 3 4]


不指定權重,調用 average() 函數: 2.5
指定權重後,調用 average() 函數: 2.0
returned=True,調用 average() 函數:
(2.0, 10.0)



在多維數組中,能夠指定用於計算的軸。

import numpy as np

a = np.arange(6).reshape(3, 2)
print('咱們的數組是:')
print(a)
print('\n')


wt = np.array([3, 5])
print('指定權重後,調用 average() 函數:')
print(np.average(a, axis=1, weights=wt))
print('\n')

print('returned=True,調用 average() 函數:')
print(np.average(a, axis=1, weights=wt, returned=True))     # 返回每一行的權重

輸出結果爲:

咱們的數組是:
[[0 1]
[2 3]
[4 5]]


指定權重後,調用 average() 函數:
[0.625 2.625 4.625]


returned=True,調用 average() 函數:
(array([0.625, 2.625, 4.625]), array([8., 8., 8.]))

 

標準差

標準差是一組數據平均值分散程度的一種度量。標準差是方差的算術平方根。

標準差=sqrt(((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/n)

 

# 數組是 [1,2,3,4],則其平均值爲 2.5。 所以,差的平方是 [2.25,0.25,0.25,2.25],而且差的平方加和後爲5,再除以 4後開方,即 sqrt(5/4) ,結果爲 1.1180339887498949。

import numpy as np 
 
print (np.std([1,2,3,4]))

輸出結果爲:

1.1180339887498949

方差

統計中的方差(樣本方差)是每一個樣本值與全體樣本值的平均數之差的平方值的平均數,即 mean((x - x.mean())** 2)。標準差是方差的平方根

方差=((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/n

 

import numpy as np
 
print (np.var([1,2,3,4]))

輸出結果爲:

1.25
相關文章
相關標籤/搜索