我得到TypeError:只有length-1数组可以转换为Python标量

时间:2017-04-29 21:32:55

标签: python

import math 
import matplotlib.pyplot as plt

import numpy as np

x = np.arange(-4,5,1)

y=(math.sqrt(math.cos(x)))*(math.cos(300*x))+(math.sqrt(abs(x))-0.7*(4-x*x)**0.1) 


plt.plot(x,y)
plt.show()

我想绘制这个功能。这很简单,但我遇到了麻烦。当我运行该程序时,它说:

File "funct.py", line 7, in <module>
    y=(math.sqrt(math.cos(x)))*(math.cos(300*x))+(math.sqrt(abs(x))-0.7*(4-x*x)**0.1) 
TypeError: only length-1 arrays can be converted to Python scalar

1 个答案:

答案 0 :(得分:0)

只有numpy版本的函数,而不是来自mathbuiltins的函数,可以广播而不是处理标量参数。你想要这个:

y = (np.sqrt(np.cos(x)))*(np.cos(300*x))+(np.sqrt(np.abs(x))-0.7*(4-x*x)**0.1)

当然,这有其自身的问题:np.cos(x)给出了一些负值,您尝试使用平方根。