Python中的绘图错误

0 投票
2 回答
942 浏览
提问于 2025-04-18 08:57

我正在尝试在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的性能,里面有更多的说明。

撰写回答