6

私はPythonを初めて使用し、HW割り当てを実行しようとしていますが、このエラーが返され続けます(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) である float の新しいリストを返す必要があります。関数に h_scalar() という名前を付ける必要があります

4

6 に答える 6

6

これを使用する場合numpy.vectorizeは、1 つのオプションがあります。

>>> 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

リスト項目ではなく、リストに対して電源を使用しようとしています。ここでは正確な関数が間違っている可能性がありますが、リストを取得してリストを返すには、このようなことを試してください。

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

リスト (または別の反復可能なオブジェクト) 内のすべての項目に対して操作を実行し、操作の戻り値から新しいリストを作成するには、次のようにします。

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

ここで 2 行目に使用されている 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 に答える