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

如何修复Python绘图中‘x与y首维度不匹配((192,)和(1,))’报错?

问题原因与修复方案

核心问题

  1. 函数调用错误:你在plt.plot和plt.errorbar中直接使用了cw_signal(函数对象),而非调用函数获取计算后的数组。此时cw_signal是函数引用,不是长度为192的数组,自然和t的维度不匹配。
  2. 函数参数冗余:cw_signal定义了amp, f, t, phi参数,但函数内部直接覆盖了这些参数的值,导致外部传入的参数完全失效,失去了封装的意义。

修复步骤

方案1:保留函数参数灵活性

修改函数,移除内部硬编码,使用外部传入的参数计算:

import math
import numpy as np
import matplotlib.pyplot as plt

def cw_signal(amp, f, t, phi):
    seconds_per_day = 24*60*60
    return amp*np.cos(2*np.pi*f * seconds_per_day*t + phi)

# 定义参数
amp = 2e-6
f = 3e-9
phi = math.pi / 2
t = np.linspace(53005, 58849, 192)

residuals = np.zeros(192)
wn = 1e-6
residuals += wn*np.random.randn(192)

# 调用函数获取计算后的数组
cw_data = cw_signal(amp, f, t, phi)

plt.plot(t, cw_data, marker='.', ls='', label='cw')
plt.errorbar(t, cw_data + residuals, marker='.', yerr=wn, ls='', label='cw+residuals')
plt.xlabel('MJD')
plt.legend()
plt.tight_layout()
plt.show()

方案2:简化函数(无需外部参数)

如果不需要外部控制参数,直接移除函数参数,内部定义所有变量:

import math
import numpy as np
import matplotlib.pyplot as plt

def cw_signal():
    seconds_per_day = 24*60*60
    amp = 2e-6
    f = 3e-9
    phi = math.pi / 2
    t = np.linspace(53005, 58849, 192)
    return amp*np.cos(2*np.pi*f * seconds_per_day*t + phi), t

# 调用函数获取数据和时间轴
cw_data, t = cw_signal()

residuals = np.zeros(192)
wn = 1e-6
residuals += wn*np.random.randn(192)

plt.plot(t, cw_data, marker='.', ls='', label='cw')
plt.errorbar(t, cw_data + residuals, marker='.', yerr=wn, ls='', label='cw+residuals')
plt.xlabel('MJD')
plt.legend()
plt.tight_layout()
plt.show()

关键说明

  • 调用函数必须加括号(如cw_signal(amp, f, t, phi)),才能执行函数并返回计算后的数组。
  • 函数参数要么用于接收外部输入,要么直接移除,避免冗余代码造成混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:46:09