我有问题。我试图为d
的不同值绘制函数。我已将d
定义为:
d = np.arange(0.0, 100.0, 0.01)
但我仍然得到同样的错误:
TypeError:只能将length-1数组转换为Python标量
这是我的剧本:
import pylab
import numpy as np
import scipy
import matplotlib.pyplot as plt
import math
from scipy.optimize import curve_fit
import numpy
def teo_function(d):
return 2*math.pi*math.sqrt(((1**2)/(12+d**2))/9.81*d)
d = np.arange(0.0, 100.0, 0.01)
T = teo_function(d)
pylab.plot (d,teo_function(d), 'bo', d, teo_function(d), 'k')
pylab.show()
感谢大家的帮助。
答案 0 :(得分:3)
您必须对函数teo_function
进行矢量化以使用数组:
import numpy as np
import matplotlib.pyplot as plt
import math
def teo_function(d):
return 2*math.pi*math.sqrt(((1**2)/(12+d**2))/9.81*d)
vecfunc = np.vectorize(teo_function)
d = np.arange(0.0, 100.0, 0.01)
T = vecfunc(d)
plt.plot (d, T, 'bo', d, T, 'k')
plt.show()
答案 1 :(得分:2)
函数teo_function
使用math.sqrt
,它适用于标量,而不是数组。如果您使用过numpy数组,请使用numpy
中包含的数学运算,例如。 numpy.sqrt
。 Numpy相当于我在math.module
中所知的所有函数,这些函数已针对numpy数组进行了优化。
Numpy的功能也适用于标量,列表,元组和更多类型。
例如:
def teo_function(d):
return 2*np.pi*np.sqrt(((1**2)/(12+d**2))/9.81*d)
答案 2 :(得分:1)
另一种方式。如果您希望函数返回列表
def teo_function(ds):
return [2*math.pi*math.sqrt(((1**2)/(12+d**2))/9.81*d) for d in ds]