Python绘制序列变化曲线触发维度不匹配错误如何修复
错误原因
- 你对生成的序列
x调用了set()做去重处理,得到的集合长度和作为横坐标的i长度不匹配:np.linspace(0,100)默认生成50个点,两者长度不一致触发维度报错。 - 循环逻辑存在漏洞:你已经提前对
x[0]赋了初值,但循环从n=0开始运行,第一次执行时x[n-1]会触发Python负索引规则,取到数组最后一位的初始值,不符合序列递推的逻辑。 - 你的需求是展示序列随参数
n的变化规律,不需要额外生成linspace序列作为横坐标,也不需要对序列x做去重。
修复后代码
import matplotlib.pyplot as plt import numpy as np x = np.zeros(101) x[0] = 0 # 循环从n=1开始,符合递推逻辑 for n in range(1, 101): x[n] = x[n-1] - n if x[n] < 0: x[n] = x[n-1] + n # 横坐标取n的取值范围0~100,和序列x长度完全匹配 n_axis = np.arange(0, 101) plt.plot(n_axis, x, 'g') plt.xlabel('参数n') plt.ylabel('序列取值') plt.show()
补充说明
如果你确实需要绘制去重后序列值的分布,需要保证两个绘图序列长度一致,可以用如下写法:
y = sorted(set(x)) plt.plot(y, np.arange(len(y)), 'g') plt.show()
这种绘制的是去重后序列值的升序分布,不是随参数n的变化规律。
内容的提问来源于stack exchange,提问作者Mackenzie Watts
相关产品推荐
相关产品推荐

