我试图在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标量
答案 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