在Python中绘制错误

时间:2014-06-07 07:01:08

标签: python plot

我试图在python中绘制一个简单的函数(x + sqrt(x ^ 2 + 2x))。这是我的代码:

import pylab as pl
import numpy as np
import math
X = np.linspace(-999999,999999)
Y = (X+math.sqrt(X**2+2*X))
pl.plot(X,Y)
pl.show()

以下是我所面临的错误: TypeError:只能将长度为-1的数组转换为Python标量

2 个答案:

答案 0 :(得分:1)

使用

Y = [(x+math.sqrt(x**2+2*x)) for x in X]

Y = map(lambda x: (x+math.sqrt(x**2+2*x)), X)

生成y值列表。

您还可以矢量化您的功能并应用它。有关其他说明,请参阅List comprehension, map, and numpy.vectorize performance

答案 1 :(得分:0)

您的方法存在的问题是math.sqrt函数需要一个数字作为输入。由于你有一个带有多个元素的numpy数组,你应该使用Rory Yorke建议的内置numpy函数sqrt,即

Y = X+np.sqrt(X**2+2*X

由于numpy功能更加优化,因此可以提供更好的性能, 例如:

X = np.arange(10000)
timeit Y = map(lambda x: (x+math.sqrt(x**2+2*x)), X)
10 loops, best of 3: 82.1 ms per loop
timeit Y = X+np.sqrt(X**2+2*X) 
10000 loops, best of 3: 108 µs per loop