You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决scipy.signal.welch处理后matplotlib绘图x/y维度不匹配报错

报错解决方案

ValueError: x and y must have same first dimension 报错的核心原因是你对f和Welch两个数组单独做阈值过滤,两者的过滤逻辑没有对齐,导致最终传入plt.plot的两个数组长度不一致。

以下是两种可行的修复方案:

方案1:使用统一布尔掩码对齐过滤(推荐)

仅保留两个数组对应位置都满足阈值要求的元素,完全保证长度匹配,修改代码如下:

f, Welch = signal.welch(Txt, fs=1.0, window="hann", nperseg=None, noverlap=None, nfft=3062, detrend="constant", return_onesided=True, scaling="density", axis=-1, average="mean")

# 生成统一掩码:对应位置的f和Welch都大于1e-14才保留
valid_mask = (f > 1e-14) & (Welch > 1e-14)
BypassZero1 = f[valid_mask]
BypassZero2 = Welch[valid_mask]

Log_f = np.log(BypassZero1)
Log_Welch = np.log(BypassZero2)

plt.plot(Log_f, Log_Welch)

这种方式既彻底避免了log计算零值的警告,也不会出现维度不匹配问题。

方案2:无需提前过滤,直接屏蔽警告

如果不想丢失任何数据点,可以利用np.log内置参数或者临时警告屏蔽机制,不修改原始数组长度(signal.welch输出的f和Welch本身长度是对齐的):

import warnings
f, Welch = signal.welch(Txt, fs=1.0, window="hann", nperseg=None, noverlap=None, nfft=3062, detrend="constant", return_onesided=True, scaling="density", axis=-1, average="mean")

# 临时屏蔽log除零警告
with warnings.catch_warnings():
    warnings.filterwarnings("ignore", category=RuntimeWarning, message="divide by zero encountered in log")
    Log_f = np.log(f)
    Log_Welch = np.log(Welch)

plt.plot(Log_f, Log_Welch)

另外你代码里还有一个小bug:Subjects = ["Subject1" "Subject2"]两个字符串之间缺少逗号,Python会自动把两个字符串拼接成Subject1Subject2,需要改成Subjects = ["Subject1", "Subject2"]。

内容的提问来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:12:04