scipy库中的stats模块
scipy簡介
scipy是Python的一個科學計算庫,它導入了numpy庫中的所有命名空間,而且包含其他的一些庫。其中的stats庫是一個提供統計功能的庫,import scipy.stats 進行導入
先學習一部分關于scipy模塊的基礎知識
scipy基礎功能
與numpy交互
scipy模塊建立在numpy模塊的基礎上,在scipy模塊的頂層包含numpy模塊的所用方法,但是調用這些方法還是在numpy模塊中調用比較好,調用scipy的某些模塊中的方法,需要這樣
>>> from scipy import some_module >>> some_module.some_function()索引技巧
一些類示例使用了特殊的切片方法,來快速構建數組
使用原有的組合數組的方法concatenate可以將數組按照指定的維度組合起來
>>> a = np.array([[1, 2], [3, 4]]) >>> b = np.array([[5, 6]]) >>> np.concatenate((a, b), axis=0) # 表示列方向 array([[1, 2],[3, 4],[5, 6]]) >>> np.concatenate((a, b.T), axis=1) # 表示行方向 array([[1, 2, 5],[3, 4, 6]]) >>> np.concatenate((a, b), axis=None) array([1, 2, 3, 4, 5, 6]) # 這些疊加操作可以通過畫出矩陣圖進行理解scipy提供了可以簡化操作的方法,在第一行代碼中,有三個數組參數,[3], [0, 0, 0, 0, 0]以及[-1.???????? -0.77777778 -0.55555556 -0.33333333 -0.11111111? 0.11111111. 0.33333333? 0.55555556? 0.77777778? 1.],然后將這三個數組以默認行的方向拼接,使用第二行中的代碼,第三個數組本來要用arange方法生成,但是使用了一種獨特的切片方法,-1和1指定了范圍,10j指定了元素的數量,并沒有直接指定步長,用10j來指定數量看起來有些奇怪,但是事實就是這樣的用法,用這種方法時,端點是包括在內的,第一行代碼為了將端點包括進去,不得不將第二個端點設置為1.002;另外這句代碼中r表示行連接的意思,為了實現列連接,會使用字母c,對于二位數組c使用列連接,但是對于一維數組,c和r是一樣的效果
>>> a = np.concatenate(([3], [0]*5, np.arange(-1, 1.002, 2/9.0))) # 這是改進的版本 >>> a = np.r_[[3],[0]*5,-1:1:10j] # 3外面的中括號可寫可不寫還有一種數組拼接的方法。使用vstack函數:
np.vstack(p1, p2) #沿著列方向將兩個數組拼接,當兩個數組是一維數組時,兩個數組的長度必須是一致的,會生成一個2×n的矩陣另外一個使用擴展切片表示法的方法是mgrid,最簡單情況下,可以構造一維數組,和arange作用是一樣的,這個方法允許使用10j這種復數的形式來指定兩個端點之間的點數,對這個函數的用法還是有些不理解
>>> np.mgrid[0:5,0:5] array([[[0, 0, 0, 0, 0],[1, 1, 1, 1, 1],[2, 2, 2, 2, 2],[3, 3, 3, 3, 3],[4, 4, 4, 4, 4]],[[0, 1, 2, 3, 4],[0, 1, 2, 3, 4],[0, 1, 2, 3, 4],[0, 1, 2, 3, 4],[0, 1, 2, 3, 4]]]) >>> np.mgrid[0:5:4j,0:5:4j] array([[[ 0. , 0. , 0. , 0. ],[ 1.6667, 1.6667, 1.6667, 1.6667],[ 3.3333, 3.3333, 3.3333, 3.3333],[ 5. , 5. , 5. , 5. ]],[[ 0. , 1.6667, 3.3333, 5. ],[ 0. , 1.6667, 3.3333, 5. ],[ 0. , 1.6667, 3.3333, 5. ],[ 0. , 1.6667, 3.3333, 5. ]]])形狀操縱
在官方文檔中提到:有一些函數用來壓縮n維數組,還有分割數組,但是并沒有指出,可能在API手冊中
多項式
在scipy包中有兩種處理一元n次多項式的方法。第一種方法是使用numpy包中的ploy1d類,這個類接收多項式系數或者多項式的解作為參數。這個方法可以以代數表達式的形式執行積分、微分、求值操作。下面這些代碼是官方文檔中給出的
>>> from numpy import poly1d >>> p = poly1d([3,4,5]) >>> print(p)2 # 這個看起來很奇怪的2是指冪次,就是x^2,這個意思 3 x + 4 x + 5 >>> print(p*p) #表示兩個多項式相乘4 3 2 9 x + 24 x + 46 x + 40 x + 25 >>> print(p.integ(k=6))3 2 1 x + 2 x + 5 x + 6 >>> print(p.deriv()) 6 x + 4 >>> p([4, 5]) array([ 69, 100])以下是對多項式簡單操作的一些總結:
- p = poly1d([1, 2, 3]) 用來生成一個多項式: 1*x^2 + 2*x + 3
- p(0.5) 求x = 0.5時多項式的值
- p.r 令多項式右邊等于0,然后求多項式的根,并以數組的形式返回,得到[-1.+1.41421356j -1.-1.41421356j]
- p(p.r) 返回機器(0, 0)的精度
- p.c 用數組形式返回多項式的系數
- p.r 返回多項式的階數
- p[k] 返回k次項的系數
- p**k 返回多項式的k次冪形成的多項式
- numpy.square(p) 對p多項式的每一項的系數平方。然后以數組的形式返回
- p = np.poly1d([1,2,3], variable='z') 將多項式中的未知數指定為z然后生成多項式
- np.poly1d([1, 2], True) 這句代碼指定多項式的根為[1, 2]然后生成多項式
- np.poly1d([1, -1]) * np.poly1d([1, -2]) 用兩個一階多項式構造了一個二階多項式,可以聯想到因式分解
- p.integ(k = 6) 對p多項式積分,積分常數為k
- p.deriv() 對多項式微分
還有一種處理多項式的方法是將多項式抽取為一個系數數組,數組第一個元素是最高次項的系數,然后用顯示函數實現多項式的計算
向量操作
numpy提供的一個特性是類vectorize,將一個普通的python函數轉換為一個“向量化函數”,看例子就明白了
>>> def addsubtract(a,b): ... if a > b: ... return a - b ... else: ... return a + b這個函數的參數和返回值都是標量
>>> vec_addsubtract = np.vectorize(addsubtract)返回一個函數(頭一次知道函數可以當返回值,python真的一切皆為對象)
>>> vec_addsubtract([0,3,6,9],[1,3,5,7]) array([1, 6, 1, 2])這是向量版本的addsubtract函數。一般高性能的函數都是使用了向量特性
類型處理
這里面說的暫時用不到,先不仔細看了,和復數虛數有關
其他有用的功能
相位處理,有angle,unwrap函數;linspace, logspace以線性,對數尺度返回等元素等間隔分布的數組;然后先提一下where函數,它的用法如下,第一個參數是一個條件,如果條件為真,輸出數組相應索引位置的值采用第一種值,如果條件為假,采用第二種值
>>> a = np.arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.where(a < 5, a, 10*a) array([ 0, 1, 2, 3, 4, 50, 60, 70, 80, 90])對于多維數組也是成立的
>>> np.where([[True, False], [True, True]], ... [[1, 2], [3, 4]], ... [[9, 8], [7, 6]]) array([[1, 8],[3, 4]])其實條件就是一個掩膜
?在numpy中有一個加強版的where函數 select,它的第一個參數是一個數組,這個數組里面是條件,第二個參數是一個長度為2的一維數組,分別指定條件為真為假時的值
>>> x = np.arange(10) >>> condlist = [x<3, x>5] >>> choicelist = [x, x**2] >>> np.select(condlist, choicelist) array([ 0, 1, 2, 0, 0, 0, 36, 49, 64, 81])還有其他一些有用的功能,比如factorial方法用來計算階乘,還用很復雜的函數,在scipy.misc中可以找到
stats簡介
介紹
這個包中的內容包括離散統計分布以及連續統計分布
隨機變量
這個包中有很多實用的隨機變量,可以通過使用info(stats)獲得這些函數的狀態和完整列表,但是我沒成功,
常用方法
- stats.linregress(x, target_data) 這個方法是最小二乘法回歸計算,第一次參數指定點的橫坐標,第二個參數指定點的縱坐標,函數有五個返回值,分別是:斜率、截距、相關系數、t分布相關的一個參數、估計梯度標準誤差,一般常用的是前三個參數
暫時先停一下!
?
總結
以上是生活随笔為你收集整理的scipy库中的stats模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html图片下载链接怎么弄_html 导
- 下一篇: 基于Matlab的人脸识别设计(PCA)