Python报Only size-1 arrays错误,奇数n的函数h绘图失败如何解决
问题原因分析
- 第一个错误根源:你导入了
math模块的sin函数,该函数仅支持传入单个数值(标量)作为参数,但你的x是NumPy生成的数组,直接传入就会触发only size-1 arrays can be converted to Python scalars报错。不需要额外用vectorize,直接用NumPy自带的向量化sin函数即可。 - 第二个逻辑错误:你把
j = h + j写在了for循环外部,只会累加最后一次循环的h值,无法得到前20项的求和结果,和预期的傅里叶级数叠加逻辑不符。
修正后可运行代码
import numpy as np import matplotlib.pyplot as plt j = 0 x = np.arange(-np.pi, np.pi, 0.01) for n in range(1, 21): if n % 2 == 0: h = 0 else: # 使用numpy的向量化sin函数,支持数组输入 h = (4/(n*np.pi))*np.sin(n*x) # 把累加操作移到循环内部,每次循环都更新求和结果 j = h + j plt.plot(x, j) plt.show()
补充说明
如果确实需要用到自定义函数对NumPy数组做逐元素运算,才需要用到np.vectorize装饰器,当前场景下NumPy自带的三角函数已经原生支持向量化运算,不需要额外处理。
内容的提问来源于stack exchange,提问作者J Pablo A
相关产品推荐
相关产品推荐

