首页 > 解决方案 > TypeError:尝试绘制函数时,只能将大小为 1 的数组转换为 Python 标量

问题描述

我有当前的代码:

from math import cos, sin, pi
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*pi))*(((cos((n*pi)/2))-1)*(sin((n/2)*x))))
        values.append(s)
        
    return values

x = np.linspace(-2*pi, 6*pi, 500)
plt.plot(f(x))

我应该绘制 f(x),但是当我运行代码时,我得到了这个错误:

TypeError:只有大小为 1 的数组可以转换为 Python 标量

关于我做错了什么的任何想法?

任何帮助将不胜感激!

标签: pythonfunctionplottypeerrorlinspace

解决方案


我认为x公式中的值仅适用于 的一个值x,并且由于您有多个x以列表的形式存在,因此您必须遍历它们中的每一个(例如,使用for xval in x:),执行计算并将计算的值附加到values清单_

from math import cos, sin, pi
import numpy as np
import matplotlib.pyplot as plt

def f(x):
    values = []
    for xval in x:
        s = 0
        for n in range(1, 6, 1):
            s += -((2/(n*pi))*(((cos((n*pi)/2))-1)*(sin((n/2)*xval))))
        values.append(s * -1)
        
    return values

x = np.linspace(-2*pi, 6*pi, 500)
plt.plot(f(x))
plt.show()

推荐阅读