矢量化函数(Python)

时间:2013-10-02 14:50:00

标签: python numpy scipy vectorization scalar

我是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()

6 个答案:

答案 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)