python scipy瞭解
阿新 • • 發佈:2018-11-10
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)