我是python的新手并试图进行硬件分配,并且不断向我发送此错误(在iPython Notebook中):
"TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'float'"
这是我试图模仿的公式:h(x)=(1 /√2π)* e ^ - (1/2)^ x ^ 2
import numpy as np
import math
from math import *
def h_scalar(x):
return (1 / sqrt(2 * pi)) * exp(-.50** x ** 2.00)
我正试着和老师一样出局。
l = [-10.0, -1.0, 0.0, 1.0, 10.0] #
print h_scalar(l)
>>> [1.4867195147342977e-06, 0.24197072451914337, 0.3989422804014327,
0.24197072451914337, 1.4867195147342977e-06]
这是老师的问题btw:
首先,编写一个名为h_scalar的函数。该函数应该期望一个列表(或者通常是一个可迭代的项)。它期望列表包含浮点值。它应返回一个新的浮点列表,它是输入列表中每个x值的h(x)。您应该将函数命名为h_scalar()
答案 0 :(得分:6)
使用numpy
的{{1}}和sqrt
,您将获得更好的效果,它将按元素运行:
exp
您可以像以下一样使用它:
import numpy as np
from numpy import sqrt, exp, pi
def h_scalar(x):
x = np.array(x)
return (1/sqrt(2*pi)) * exp(-0.50*x**2)
答案 1 :(得分:4)
如果您想使用numpy.vectorize
,这是一个选项:
>>> import numpy as np
>>> h_scalar = np.vectorize(lambda x: (1 / np.sqrt(2 * np.pi)) * np.exp( -.50** x ** 2.00 ))
>>> l = np.array([-10.0, -1.0, 0.0, 1.0, 10.0])
>>> h_scalar(l)
答案 2 :(得分:0)
要对列表(或其他可迭代对象)中的所有项执行操作,从操作的返回值创建新列表,您可以执行以下操作:
>>> l = [1,2,3,4,5]
>>> l2 = [ 2 * x for x in l ]
>>> print l2
[2, 4, 6, 8, 10]
此处第二行使用的Python语言功能称为list comprehension,它非常适合您已完成的作业任务。
答案 3 :(得分:0)
你想要的是list comprehension。
像这样:
def h_scalar(sca):
return [(1 / sqrt(2 * pi)) * exp(-.50** x ** 2.00) for x in sca]
答案 4 :(得分:0)
您正试图在列表而不是列表项上使用电源。我可能在这里有错误的功能,但尝试这样的事情来获取一个列表并返回一个列表。
def h_scalar(x):
return [(1/sqrt(2*pi))*exp(-.50 ** i ** 2.0) for i in x]
我不确定你是否有正确的等式,你可以重新格式化吗?
In [14]: h_scalar(l)
Out[14]:
[0.3989422804014327,
0.24197072451914337,
0.14676266317373993,
0.24197072451914337,
0.3989422804014327]
答案 5 :(得分:0)
将numpy导入为np 导入数学 来自数学导入*
def h_scalar(x): 返回(1 / sqrt(2 * pi))* exp(-。50 ** x ** 2.00)
l = [-10.0,-1.0,0.0,1.0,10.0]
h_scalar = np.vectorize(h_scalar) ##您在代码中缺少此行
打印h_scalar(l)