首页 > 技术文章 > 使用svd对信号矩阵降噪

StarZhai 2020-11-22 16:50 原文

本文涉及的相关知识点如下:

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)

 

 

推荐阅读