1. 程式人生 > >Python-Numpy多維陣列 -- 算數運算, 統計函式

Python-Numpy多維陣列 -- 算數運算, 統計函式

一、Numpy - 算數運算

1.用於執行算術運算(如add()subtract()multiply()divide())的輸入陣列必須具有相同的形狀或符合陣列廣播規則。

demo

  1. import numpy as np
    a = np.arange(9, dtype = np.float_).reshape(3,3)
    print '第一個陣列:'
    print a
    print '第二個陣列:'
    b = np.array([10,10,10])
    print b
    print '兩個陣列相加:'
    print np.add(a,b)
    print '兩個陣列相減:'
    print np.subtract(a,b)
    print '兩個陣列相乘:'
    print np.multiply(a,b)
    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]]

     

2.numpy.reciprocal()函式返回引數逐元素的倒數。 由於 Python 處理整數除法的方式,對於絕對值大於 1 的整數元素,結果始終為 0, 對於整數 0,則發出溢位警告。

demo

import numpy as np
a = np.array([0.25, 1.33, 1, 0, 100])
print '我們的陣列是:'
print a
print '呼叫 reciprocal 函式:'
print np.reciprocal(a)
b = np.array([100], dtype = int)
print '第二個陣列:'
print b
print '呼叫 reciprocal 函式:'
print np.reciprocal(b)
輸出如下:
我們的陣列是:
[ 0.25 1.33 1. 0. 100. ]
呼叫 reciprocal 函式:
main.py:9: RuntimeWarning: divide by zero encountered in reciprocal
print np.reciprocal(a)
[ 4. 0.7518797 1. inf 0.01 ]
第二個陣列:[100]
呼叫 reciprocal 函式:[0]

3.numpy.power()此函式將第一個輸入陣列中的元素作為底數,計算它與第二個輸入陣列中相應元素的冪。

 

import numpy as np
a = np.array([10,100,1000])
print '我們的陣列是;'
print a
print '呼叫 power 函式:'
print np.power(a,2)
print '第二個陣列:'
b = np.array([1,2,3])
print b
print '再次呼叫 power 函式:'
print np.power(a,b)
輸出如下:
我們的陣列是;[ 10 100 1000]
呼叫 power 函式:[ 100 10000 1000000]
第二個陣列:[1 2 3]
再次呼叫 power 函式:[ 10 10000 1000000000]

4.numpy.mod()此函式返回輸入陣列中相應元素的除法餘數。 函式numpy.remainder()也產生相同的結果。

import numpy as np
a = np.array([10,20,30])
b = np.array([3,5,7])
print '第一個陣列:'
print a
print '第二個陣列:'
print b
print '呼叫 mod() 函式:'
print np.mod(a,b)
print '呼叫 remainder() 函式:'
print np.remainder(a,b)
輸出如下:
第一個陣列:[10 20 30]
第二個陣列:[3 5 7]
呼叫 mod() 函式:[1 0 2]
呼叫 remainder() 函式:[1 0 2]

 

5.以下函式用於對含有複數的陣列執行操作。

  • numpy.real() 返回複數型別引數的實部。

  • numpy.imag() 返回複數型別引數的虛部。

  • numpy.conj() 返回通過改變虛部的符號而獲得的共軛複數。

  • numpy.angle() 返回複數引數的角度。 函式的引數是degree。 如果為true,返回的角度以角度制來表示,否則為以弧度制來表示。

  1.  

import numpy as np
a = np.array([-5.6j, 0.2j, 11. , 1+1j])
print '我們的陣列是:'
print a
print '呼叫 real() 函式:'
print np.real(a)
print '呼叫 imag() 函式:'
print np.imag(a)
print '呼叫 conj() 函式:'
print np.conj(a)
print '呼叫 angle() 函式:'
print np.angle(a)
print '再次呼叫 angle() 函式(以角度制返回):'
print np.angle(a, deg = True)
輸出如下:
我們的陣列是:[ 0.-5.6j 0.+0.2j 11.+0.j 1.+1.j ]
呼叫 real() 函式:[ 0. 0. 11. 1.]
呼叫 imag() 函式:[-5.6 0.2 0. 1. ]
呼叫 conj() 函式:[ 0.+5.6j 0.-0.2j 11.-0.j 1.-1.j ]
呼叫 angle() 函式:[-1.57079633 1.57079633 0. 0.78539816]
再次呼叫 angle() 函式(以角度制返回):[-90. 90. 0. 45.]

二、Numpy - 統計函式

1.numpy.amin() 和 numpy.amax()

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

demo

import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print '我們的陣列是:'
print a
print '呼叫 amin() 函式:'
print np.amin(a,1)
print '再次呼叫 amin() 函式:'
print np.amin(a,0)
print '呼叫 amax() 函式:'
print np.amax(a)
print '再次呼叫 amax() 函式:'
print np.amax(a, axis = 0)
輸出如下:
我們的陣列是:
[[3 7 5]
[8 4 3]
[2 4 9]]
呼叫 amin() 函式:[3 3 2]
再次呼叫 amin() 函式:[2 4 3]
呼叫 amax() 函式:9
再次呼叫 amax() 函式:[8 7 9]

2.numpy.ptp()函式返回沿軸的值的範圍(最大值 - 最小值)。

 

import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print '我們的陣列是:'
print a
print '呼叫 ptp() 函式:'
print np.ptp(a)
print '沿軸 1 呼叫 ptp() 函式:'
print np.ptp(a, axis = 1)
print '沿軸 0 呼叫 ptp() 函式:'
print np.ptp(a, axis = 0)
輸出如下:
我們的陣列是:
[[3 7 5]
[8 4 3]
[2 4 9]]
呼叫 ptp() 函式:7
沿軸 1 呼叫 ptp() 函式:[4 5 7]
沿軸 0 呼叫 ptp() 函式:[6 3 6]

3.numpy.percentile()百分位數是統計中使用的度量,表示小於這個值得觀察值佔某個百分比。 函式numpy.percentile()接受以下引數。numpy.percentile(a, q, axis)

 

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

demo

import numpy as np
a = np.array([[30,40,70],[80,20,10],[50,90,60]])
print '我們的陣列是:'
print a
print '呼叫 percentile() 函式:'
print np.percentile(a,50)
print '沿軸 1 呼叫 percentile() 函式:'
print np.percentile(a,50, axis = 1)
print '沿軸 0 呼叫 percentile() 函式:'
print np.percentile(a,50, axis = 0)
輸出如下:
我們的陣列是:
[[30 40 70]
[80 20 10]
[50 90 60]]
呼叫 percentile() 函式:50.0
沿軸 1 呼叫 percentile() 函式:[ 40. 20. 60.]
沿軸 0 呼叫 percentile() 函式:[ 50. 40. 60.]

4.numpy.median()中值定義為將資料樣本的上半部分與下半部分分開的值。 numpy.median()函式的用法如下面的程式所示。

 

demo

import numpy as np
a = np.array([[30,65,70],[80,95,10],[50,90,60]])
print '我們的陣列是:'
print a
print '呼叫 median() 函式:'
print np.median(a)
print '沿軸 0 呼叫 median() 函式:'
print np.median(a, axis = 0)
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.]

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

 

demo

import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print '我們的陣列是:'
print a
print '呼叫 mean() 函式:'
print np.mean(a)
print '沿軸 0 呼叫 mean() 函式:'
print np.mean(a, axis = 0)
print '沿軸 1 呼叫 mean() 函式:'
print np.mean(a, axis = 1)
輸出如下:
我們的陣列是:
[[1 2 3]
[3 4 5]
[4 5 6]]
呼叫 mean() 函式:3.66666666667
沿軸 0 呼叫 mean() 函式:[ 2.66666667 3.66666667 4.66666667]
沿軸 1 呼叫 mean() 函式:[ 2. 4. 5.]

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

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

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

demo

import numpy as np
a = np.array([1,2,3,4])
print '我們的陣列是:'
print a
print '呼叫 average() 函式:'
print np.average(a)
# 不指定權重時相當於 mean 函式
wts = np.array([4,3,2,1])
print '再次呼叫 average() 函式:'
print np.average(a,weights = wts)
# 如果 returned 引數設為 true,則返回權重的和
print '權重的和:'
print np.average([1,2,3, 4],weights = [4,3,2,1], returned = True)
輸出如下:
我們的陣列是:[1 2 3 4]
呼叫 average() 函式:2.5
再次呼叫 average() 函式:2.0
權重的和:(2.0, 10.0)

7.在多維陣列中,可以指定用於計算的軸。

demo

import numpy as np
a = np.arange(6).reshape(3,2)
print '我們的陣列是:'
print a
print '修改後的陣列:'
wt = np.array([3,5])
print np.average(a, axis = 1, weights = wt)
print '修改後的陣列:'
print np.average(a, axis = 1, weights = wt, returned = True)
輸出如下:
我們的陣列是:
[[0 1]
[2 3]
[4 5]]
修改後的陣列:[ 0.625 2.625 4.625]
修改後的陣列:(array([ 0.625, 2.625, 4.625]), array([ 8., 8., 8.]))

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

 

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

demo

import numpy as np
print np.std([1,2,3,4])
輸出如下:
1.1180339887498949

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

 

demo

import numpy as np
print np.var([1,2,3,4])
輸出如下:
1.25