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)

猜你喜欢

转载自blog.csdn.net/qq_43287650/article/details/82875179