Numpy中求标准差的函数std( )与Matlab中求标准差的函数std( )对同一组数据求标注差结果不一样

本文探讨了Matlab与Python Numpy库中标准差函数std的不同结果的原因,并通过调整Numpy函数参数ddof为1使结果一致。
一、问题描述
“Matlab求标注差函数std与Python Numpy中求标注差函数std对统一数据求标准差的结果不一样”

Matlab示例:
>> a = [1,3,7,10,20];
>> std(a)
ans =
    7.4632
Python Numpy示例:
>>> a = [1,3,7,10,20]
>>> np.std(a)
6.675327707311455

两者同样取标准差,为什么结果不一样呢?


二、原因分析
参数ddof默认是0
在标准统计实际应用中,ddof=1提供了对无限总体样本的方差的无偏估计
ddof=0表示对正态分布变量的方差的最大似然估计

三、解决方法
>>> a = [1,3,7,10,20]
>>> np.std(a,ddof=1)
7.463243262818116
后跟Matlab的结果相同了

<think>好的,我现在需要帮助用户了解如何将西储大学轴承数据的一维信号转换为二维图像,特别是使用递归图(Recurrence Plot)的方法。首先,我得确认自己对递归图的理解是否正确。递归图是一种将时间序列数据转换为二维图像的技术,通过分析信号中同时间点之间的相似性来可视化系统的动态特性。这种方法常用于非线性时间序列分析,适合检测信号中的周期性、非平稳性等特征。 接下来,用户提到的西储大学轴承数据是公开的经典数据集,常用于故障诊断研究。数据主要包括正常和同故障类型(如内圈、外圈、滚动体故障)的振动信号。我需要考虑如何从这些一维振动信号生成递归图,可能需要用到Python或MATLAB等工具。 然后,我需要分解处理步骤。首先,数据预处理是必要的,包括读取信号、去噪、归一化等。接着,计算递归图的关键在于构建递归矩阵,这通常涉及比较同时间点的状态向量。状态向量可能需要通过时间延迟嵌入法来构建,这涉及到参数选择,如嵌入维度m和时间延迟τ。如果用户熟悉这些参数,可能需要解释或提供默认值,比如使用互信息法或自相关法确定τ,使用虚假最近邻法确定m。 然后,递归矩阵的计算是通过阈值判断两个状态向量是否接近,常用的是欧氏距离或曼哈顿距离,并设定一个阈值ε。当距离小于ε时,矩阵对应位置为1,否则为0。或者可以使用Heaviside函数。这部分可能需要调整阈值的选择,过小可能导致信息丢失,过大则可能引入噪声。 生成递归图后,可能需要后处理,比如二值化或颜色映射,并保存为图像文件。用户可能希望将生成的图像用于深度学习模型,如CNN,因此图像的大小和格式需要适配模型输入。 在思考过程中,我需要考虑用户可能的背景。他们可能是从事故障诊断的研究人员或学生,对信号处理和机器学习有一定了解,但可能熟悉递归图的具体实现。因此,解释步骤时需要平衡技术细节和易懂性,避免过于复杂的数学推导,但关键公式仍需用LaTeX标注。 可能的问题点包括参数选择对结果的影响,如何处理同长度的信号,以及递归图的有效性验证。用户可能想知道这种方法其他时频分析(如小波变换、短时傅里叶变换)相比的优势,比如递归图需要窗口函数,能够捕捉非线性动态特性。 最后,我需要提供一个Python示例代码框架,使用常见库如numpy、matplotlib和scipy,帮助用户快速实现。同时提醒注意事项,如参数调整、计算复杂度等,确保用户在实际操作中能够顺利应用。</think>以下是使用递归图(Recurrence Plot)将西储大学轴承数据的一维振动信号转换为二维图像的技术流程: **1. 数据预处理** - 读取振动信号$s = \{s_1, s_2, ..., s_N\}$,建议采样长度$N=1024$ - 标准化处理:$x_i = \frac{s_i - \mu}{\sigma}$,其中$\mu$为均值,$\sigma$为标准差 - 可选去噪:使用小波阈值去噪或滑动平均滤波 **2. 递归图生成原理** 递归矩阵$R$定义为: $$ R_{i,j} = \Theta(\epsilon - \| \vec{x}_i - \vec{x}_j \|) $$ 其中: - $\Theta$为Heaviside阶跃函数 - $\epsilon$为距离阈值(通常取信号标准差的10%-30%) - $\vec{x}_i$为状态向量,通过时间延迟嵌入法构建: $$ \vec{x}_i = [x_i, x_{i+\tau}, ..., x_{i+(m-1)\tau}] $$ **3. 关键参数选择** - 嵌入维度$m$:使用虚假最近邻法确定(通常2-5) - 时间延迟$\tau$:使用自相关函数第一个过零点或互信息法确定 - 阈值$\epsilon$:经验公式$\epsilon = k \times \sigma$,$k=0.1\sim0.3$ **4. Python实现示例** ```python import numpy as np import matplotlib.pyplot as plt from scipy.spatial.distance import pdist, squareform def recurrence_plot(signal, m=3, tau=10, epsilon=0.2): # 构建相空间 N = len(signal) emb_signal = np.array([signal[i: i-(m-1)*tau or N: -tau or 1] for i in range(m)]) # 计算距离矩阵 dist = squareform(pdist(emb_signal.T, metric='euclidean')) # 生成递归矩阵 RP = np.where(dist <= epsilon * np.std(signal), 1, 0) return RP # 示例使用 signal = np.loadtxt('bearing_vibration.csv') # 加载西储数据 rp = recurrence_plot(signal, m=3, tau=12, epsilon=0.15) plt.imshow(rp, cmap='binary', origin='lower') plt.title('Recurrence Plot of Bearing Signal') plt.show() ``` **5. 图像后处理建议** - 尺寸归一化:统一调整为224×224像素(适配CNN输入) - 颜色增强:使用灰度或伪彩色映射 - 数据增强:添加旋转/平移(最大±5%) **注意事项** - 计算复杂度为$O(N^2)$,长信号需分段处理 - 故障信号通常呈现更明显的对角线结构断裂 - 建议结合量化分析(如递归率RR=$\frac{1}{N^2}\sum R_{i,j}$) 该方法已成功应用于滚动轴承的故障分类研究,在文献中报道的分类准确率可达95%以上(使用CNN+RP的合方案)。STFT相比,RP更适合捕捉非线性动力学特征,但对参数选择更敏感。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn-WJW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值