Python中的绘图错误
我正在尝试在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
你这个方法的问题在于,math.sqrt函数只接受一个数字作为输入。但是你用的是一个包含多个元素的numpy数组,所以应该使用numpy自带的sqrt函数,正如Rory Yorke所建议的那样。
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
1
可以使用以下方法来生成一组y值:
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值的列表。
你还可以把你的函数进行向量化,然后应用它。想了解更多,可以查看列表推导、map和numpy.vectorize的性能,里面有更多的说明。