1. 程式人生 > >python scipy瞭解

python scipy瞭解

from scipy import io
import numpy as np

一、資料的儲存和讀取

語法:io.savemat(filename,data)

#儲存
io.savemat('a.mat',{'array':np.arange(1,7)})

#讀取
data = io.loadmat('a.mat')

data
{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Thu Sep 27 15:06:16 2018',
 '__version__': '1.0',
 '__globals__': [],
 'array': array([[1, 2, 3, 4, 5, 6]])}
data['array'] #根據檢視到的key值讀取就行
array([[1, 2, 3, 4, 5, 6]])

二、利用scipy實現統計功能

1.生成隨機數

scipy.stats 包中的統計函式實現分析隨機數的功能
在這裡插入圖片描述

from scipy import stats #匯入模組

(1). stats.norm.rvs()正態分佈

#生成20個正態分佈隨機數
x = stats.norm.rvs(size=20)
x
array([-0.715935  , -0.57646354, -0.91192277, -1.47499637,  0.58067673,
       -0.30705578, -0.31403808,  0.96605583, -0.26843728,  0.45996051,
        1.56301366, -0.20803445, -0.71673151,  0.60173515, -0.34564729,
        0.25549293, -0.41979267, -2.08631994,  1.54341385, -1.73885939])

(2).stats.uniform.rvs() 均勻分佈

#生成20個均勻分佈隨機數
y = stats.uniform.rvs(size=20)
y
array([0.50803216, 0.90782783, 0.06641247, 0.66453837, 0.07921956,
       0.79495135, 0.33029833, 0.88343099, 0.87133665, 0.70087887,
       0.23127253, 0.58612744, 0.83182248, 0.95559446, 0.70146743,
       0.8876029 , 0.19265978, 0.39294365, 0.63825029, 0.13264581])

2.使用scipy進行計算隨機數的均值和標準差

語法:stats.norm.fit() 得到資料的均值和標準差

# 準備一組資料
arr = stats.norm.rvs(size=900)
#使用函式得到資料的均值和標準差
stats.norm.fit(arr)
(0.02286225082515931, 0.9962644428560851)
#用變數分別將均值和標準差存起來
mean,std = stats.norm.fit(arr)

3.計算偏度,返回偏度以及符合正態分佈的概率

語法:stats.skewtest()

skewness,pvalue = stats.skewtest(arr)

4.stats.kurtosistest() 峰度 返回峰度值和靠近正態分佈資料峰度的概率

正態分佈的峰度值是3

kurtosis,pvalue2 = stats.kurtosistest(arr)

5.使用stats.normaltest() 檢測隨機數符合正態分佈的程度 返回值和概率

normaltest,pvalue3 = stats.normaltest(arr)

6.stats.scoreatpercentile(資料集,百分比)計算資料所在的區段中某一百分比處的數值

per_95 = stats.scoreatpercentilecentilecentilecentilecentilecentilecentilepercentileatpercentileatpercentile(arr,95)
per_95
1.6195198508693305

7.stats.percentileofscore(資料集,已有數值) 得到某個數所在位置的百分比

num_pos = stats.percentileofscore(arr,1.6195198508693305) #如果有重複值則會返回第一個值所在的位置的百分比
num_pos
95.0

8.使用matplotlib展示資料

import matplotlib.pyplot as plt
plt.hist(arr)
plt.show() # 只顯示圖

在這裡插入圖片描述

三、影象、音訊處理、畫圖

1、影象處理

from scipy import misc #匯入音訊處理模組
from scipy import ndimage #匯入影象處理模組
import matplotlib.pyplot as plt # 畫圖模組
# 先獲取測試的影象
image = misc.ascent()
image
# 顯示影象
plt.imshow(image)
# 利用中值濾波方法處理
filtered = ndimage.median_filter(image,size=6)
# 旋轉180 度
rotated = ndimage.rotate(image,180)
#檢測邊緣
prewitted = ndimage.prewitt(image)
#顯示最後的影象
plt.imshow(prewitted)

2.音訊處理

from scipy.io import wavfile   #匯入對wavfile進行讀取的包
import numpy as np
# 1.資料音訊取樣
sample_rate,data = wavfile.read('wolf.wav') #獲取頻率和取樣資料
# 2.顯示聲音影象
plt.subplot(2,1,1)     #第一個是行,第二個是列,放在第一個格子裡
plt.title('original') #加上標題
plt.plot(data) #將data資料以資料圖的形式展現
#把聲音擴充一倍
repeated = np.array(list(data)*2)
plt.subplot(2,1,2)     #放在第二個格子裡
plt.title('repeated') # 加入標題
plt.plot(repeated) #將repeated資料以資料圖的形式展示
#儲存在當前資料夾中
wavfile.write('wolf02.wav',sample_rate,repeated)

四、線性代數的應用

from scipy import linalg
import numpy as np
arr = np.mat('1 2;3 4')#建立一個矩陣
# 行列式
linalg.det(arr)
#逆矩陣
arr_inv = linalg.inv(arr)
# 奇異值分解
U,sigma,V = linalg.svd(arr)
# 乘回去,U和V需要轉化為矩陣,sigma 要轉換為對角矩陣
np.mat(U)*np.diag(sigma)*np.mat(V)
# 使用array.dot()  # dot()是陣列的乘法表示法
U.dot(np.diag(sigma)).dot(V)