Matlab转Python:T周期时间序列绘图问题求解
Python 实现 T 周期时间序列绘图方案
Matlab 会自动将短向量重复填充至与x轴数据长度一致,但Python的matplotlib没有这个自动扩展机制,所以需要手动把P(IndexP)和e(Index_e)这两个51长度的序列扩展到T+1个点(对应x轴的0到T,共1001个数据点)。
以下是完整的Python实现代码:
import numpy as np import matplotlib.pyplot as plt # 初始化参数 N = 75 N1 = 31 sigma_a = 0.08 # 修正原Matlab代码笔误:sigma应为sigma_a P0 = np.log(sigma_a / (sigma_a - 1)) min_val = -0.15 + P0 max_val = 0.15 + P0 # 生成P和e列向量 P = np.linspace(min_val, max_val, N).reshape(-1, 1) e = np.linspace(min_val, max_val, N1).reshape(-1, 1) T = 1000 # Matlab索引是1-based,Python是0-based,需将索引转成0起始 IndexP = IndexP - 1 # 替换为你的实际IndexP数组 Index_e = Index_e - 1 # 替换为你的实际Index_e数组 # 提取对应索引的子序列并转为一维数组 P_sub = P[IndexP].flatten() e_sub = e[Index_e].flatten() # 生成x轴数据 x = np.arange(T + 1) # 关键:循环重复短序列,匹配x轴长度 # 用取模运算生成循环索引,模拟Matlab的自动填充逻辑 P_extended = P_sub[x % len(P_sub)] e_extended = e_sub[x % len(e_sub)] # 绘图 plt.plot(x, np.column_stack((P_extended, e_extended))) plt.show()
关键说明
- 索引转换:必须把Matlab导出的1-based索引
IndexP和Index_e减1,否则会触发Python的索引越界错误。 - 序列扩展:通过
x % len(P_sub)生成循环索引,让短序列不断重复,刚好匹配x轴的1001个数据点,和Matlab的自动填充逻辑完全一致。 - 维度处理:用
flatten()将列向量转为一维数组,避免后续索引时的维度问题;np.column_stack()用来合并两个扩展后的序列,对应Matlab里的[P(IndexP) e(Index_e)]写法。
内容的提问来源于stack exchange,提问作者Kathrin_L_A
相关产品推荐
相关产品推荐

