6

我是 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]

这是老师的问题顺便说一句:

首先,编写一个名为 h_scalar 的函数。该函数应该期望一个列表(或者通常是一个可迭代的项目)。它将期望列表包含浮点值。它应该返回一个新的浮点数列表,这些浮点数是输入列表中每个 x 值的 h(x)。您应该将函数命名为 h_scalar()

4

6 回答 6

7

numpy您将使用'ssqrt和获得更好的性能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)

你可以像这样使用它:

x = [-10.0, -1.0, 0.0, 1.0, 10.0]
h_scalar(x)
于 2013-10-02T15:06:45.827 回答
6

如果您想使用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)
于 2013-10-02T14:58:47.587 回答
0

要对列表(或另一个可迭代对象)中的所有项目执行操作,从操作的返回值创建一个新列表,您可以执行以下操作:

>>> l = [1,2,3,4,5]
>>> l2 = [ 2 * x for x in l ]
>>> print l2
[2, 4, 6, 8, 10]

这里第二行使用的 Python 语言功能称为列表推导,它非常适合您布置的家庭作业。

于 2013-10-02T14:54:56.537 回答
0

你想要的是列表理解

像这样:

def h_scalar(sca):
    return [(1 / sqrt(2 * pi)) * exp(-.50** x ** 2.00) for x in sca]
于 2013-10-02T14:55:35.180 回答
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]
于 2013-10-02T14:56:48.913 回答
0

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]

h_scalar = np.vectorize(h_scalar) ## 你的代码中缺少这一行

打印 h_scalar(l)

于 2020-02-25T18:18:35.557 回答