PythonLibs(7) - SciPy

基于numpy的一个高级模块,为数学,物理,工程等方面的科学计算提供无可替代的支持。
做重要的思想是:符号计算和函数向量化

1. 符号计算

demo: n次多项式的表示,以及计算

from scipy import poly1d

p = poly1d([3, 4, 5])       # p(x) = 3x^2 + 4x + 5
print(p)
print(p * p)                # p*p = 9x^4 + 24x^3 + 46x^2 + 40x + 25
print(p.integ(k=6))         # 求p(x)的不定积分,指定常数项为6
print(p.deriv())           # 求p(x)的一阶导数: 6x + 4
print(p([4, 5]))            # 求p(4),p(5)的结果

输出

   2
3 x + 4 x + 5
   4      3      2
9 x + 24 x + 46 x + 40 x + 25
   3     2
1 x + 2 x + 5 x + 6
 
6 x + 4
[ 69 100]

2. 函数向量化

demo: 写一个支持向量操作函数

def addsubtract(a, b):
    # 结合scipy的函数实现向量操作
    if a > b:
        return a - b
    else:
        return a + b
vec_addsubtract = np.vectorize(addsubtract)
print(vec_addsubtract([0, 3, 6, 9], [1, 3, 5, 7]))
vec_poly1d = np.vectorize(p)
print(vec_poly1d([4, 5]))          # 输出结果和p([4, 5]) 是一致的

3. 波形处理scipy.signal

3.1 滤波器

基本低通、高通、带通、带阻滤波器,关键点是计算Wn。假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除400hz以上频率成分,即截止频率为400hz,则wn=2*400/1000=0.8。Wn=0.8
数字信号 W n = 1 N T ∗ 2 1 W_n =\frac{\frac{1}{N_T} * 2}{1} Wn=1NT12 其中 N_T 为一个周期内的采样点数
滤波器的阶数: 物理上理解,有几个滤波器串联。

from scipy import signal
b, a = signal.butter(8, 0.8, 'lowpass')          #8   为滤波器的阶数
filtedData = signal.filtfilt(b, a, data)         #data为要过滤的信号

b, a = signal.butter(8, 0.2, 'highpass')         #高通
b, a = signal.butter(8, [0.2,0.8], 'bandpass')   #带通
b, a = signal.butter(8, [0.2,0.8], 'bandstop')   #带阻

疑问:滤波器的数字实现、频率滤波器和均值滤波器的关系。

参考文档:Python实现信号滤波(基于scipy)

3.2 波峰定位

from scipy.signal import find_peaks
x = [......]     # 波形信号
peaks, _ = find_peaks(x, height=0)   					 # 高度大于0的峰
peaks, _ = find_peaks(x, height=(-border, border))       # 高度范围
peaks, _ = find_peaks(x, distance=150)				     # 要求至少距离150个样本的峰
peaks, properties = find_peaks(x, prominence=(None, 0.6))   # 嘈杂信号的识别,突出基线信号0.6 高度的峰
peaks, properties = find_peaks(x, prominence=1, width=20)   # 宽度要求

# 配套显示工作
import matplotlib.pyplot as plt
plt.plot(x)
plt.plot(peaks, x[peaks], "x")

突出程度:峰的突出度衡量一个峰从信号的周围基线中突出多少,并定义为峰与其最低轮廓线之间的垂直距离,

参考文档:python scipy signal.find_peaks用法及代码示例

回答: 根据引用\[1\]和引用\[2\]的内容,你遇到的问题是在使用docker运行python项目时,出现了路径不存在的错误。具体的错误信息是FileNotFoundError: \[Errno 2\] No such file or directory: './data/train'。解决这个问题的方法是使用正确的路径来访问文件。根据引用\[2\]中的示例,你可能在代码中使用了相对路径来指定文件位置,比如file = "../data/login.json"。这种相对路径的使用在当前文件运行时可能没有问题,但是当你将测试用例加载到测试套件中并在不同目录下运行时,就会导致找不到文件的错误。因此,你需要根据实际情况修改文件路径,确保能够正确访问到文件。 #### 引用[.reference_title] - *1* [解决docker FileNotFoundError: [Errno 2] No such file or directory: ‘./data/train](https://blog.csdn.net/m0_47256162/article/details/127886383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [FileNotFoundError: [Errno 2] No such file or directory: ‘../data/login.json‘ 解决方法](https://blog.csdn.net/Yu__peng/article/details/126017979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值