matplotlib绘图报only size-1 arrays can be converted to Python scalars错如何解决
错误原因
- 你使用了Python标准库
math模块下的cos、sin函数,这类函数仅支持传入单个标量数值计算,而你传入的x是numpy.linspace生成的一维数组,类型不匹配触发报错。 - 另外你的
f(x)函数返回的是长度为5的列表,每个元素是对应n阶累加后的和数组,直接传入plt.plot不仅会触发类型问题,也会导致x轴默认取索引值,和实际的x取值不匹配。
修复方案
- 将三角函数替换为
numpy内置的np.cos、np.sin,支持数组批量运算,同时把调用的pi也替换为np.pi保持类型统一。 - 绘图时需要把x数组作为第一个参数传入
plt.plot,如果需要展示5个不同阶数的逼近曲线,可以遍历f(x)的返回值依次绘制,也可以加标签区分不同阶数。
修复后完整代码
import numpy as np import matplotlib.pyplot as plt def f(x): values = [] s = 0 for n in range(1, 6, 1): s += -((2/(n*np.pi))*(((np.cos((n*np.pi)/2))-1)*(np.sin((n/2)*x)))) values.append(s) return values x = np.linspace(-2*np.pi, 6*np.pi, 500) res_list = f(x) for n, y in enumerate(res_list, start=1): plt.plot(x, y, label=f'阶数n={n}') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者Just another noob
相关产品推荐
相关产品推荐

