使用svd对信号矩阵降噪
本文涉及的相关知识点如下:
1.使用python读取mat文件
2.python对字典dict,ndarray进行操作。
3.使用svd对矩阵进行降噪
4.比较两个矩阵的误差,计算均方误差值
正文:
1.使用python读取mat文件
参考文献:https://blog.csdn.net/rumswell/article/details/8545087
核心代码只有一句:scipy.io.loadmat()
import scipy.io as sio data=sio.loadmat(“.mat文件路径”)
print(data)
加载之后根据data的类型内容进行操作,通常三维是字典,二维是ndarray
2.python对字典dict,ndarray进行操作。
①ndarray详见https://www.runoob.com/numpy/numpy-ndarray-object.html
此处列出几个ndarray的常用属性
属性 | 含义 |
---|---|
T | 转置,与self.transpose( )相同,如果维度小于2返回self |
size | 数组中元素个数 |
itemsize | 数组中单个元素的字节长度 |
dtype | 数组元素的数据类型对象 |
ndim | 数组的维度 |
shape | 数组的形状 |
data | 指向存放数组数据的python buffer对象 |
flat | 返回数组的一维迭代器 |
imag | 返回数组的虚部 |
real | 返回数组的实部 |
nbytes | 数组中所有元素的字节长度 |
注意,ndarray的属性直接调用不加括号,如
print(array.size) #查看数组内元素个数而不是.size()
①对dict的操作详见
https://www.runoob.com/python/python-dictionary.html
提示两点
1.字典的常用属性
len(dict) 计算字典元素个数,即键的总数。
dict.keys()以列表返回一个字典所有的键
2.遍历字典的方法
print(dict['key_Name'])
3.使用svd对矩阵进行降噪
参考链接:http://liao.cpython.org/scipy06/#63-svd
核心代码:
U,s,Vh = svd(data) #data是想要降噪的矩阵 A = np.dot(U[:,0:i],np.dot(np.diag(s[0:i]),Vh[0:i,:])) #取前i个特征值进行降噪
A就是矩阵data降噪后的矩阵
4.比较两个矩阵的误差,计算均方误差值
# 测试集标签预测 y_predict = lin_reg.predict(X_test) # 衡量线性回归的MSE 、 RMSE、 MAE、r2 from math import sqrt from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error from sklearn.metrics import r2_score print("mean_absolute_error:", mean_absolute_error(y_test, y_predict)) print("mean_squared_error:", mean_squared_error(y_test, y_predict)) print("rmse:", sqrt(mean_squared_error(y_test, y_predict))) print("r2 score:", r2_score(y_test, y_predict))
5.获取某个区间的连续均匀的n个数。
参考链接:https://blog.csdn.net/you_are_my_dream/article/details/53493752
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
注意想要用在for循环的时候 for循环只能读取字符串的范围或者列表的范围,需要加入一步转化,例如遍历1到100
for i in np.linspace(10,100,100,dtype=int).tolist(): print(i)