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)