7

私はPythonで作業しており、この構造で関数を変換しようとしています:

def func(g,h,iterable):
 return iterable*(g+h)

for iterable in range(20):
  print func(2,3,iterable)

マップされた関数に:

def func(g,h,iterable):
 return iterable*(g+h)

print map(func,2,3,range(20)) #does not work...

私が抱えている問題は、map()関数を介して定数を渡すことです。現在、その方法がわかりません。

Ipython 並列処理ツールを簡単に使用できるように、この構造が必要です。

推定:

  • すべての iterable に対する実際の関数の完了には約 1.5 時間かかります (したがって、並列map()関数を使用する必要がある
  • 関数が複雑で、リスト内包表記を使用できない

parfor基本的に、まだ明らかでない場合、私は MATLAB プログラマーであり、python に移行し、matlabの関数の適切な代替品を探しています。

4

4 に答える 4

5

1 つには、関数を にマップする場合range、どのパラメーターも反復可能ではありません。

あなたの質問には、functools.partialを使用して、位置パラメータ (左から右) を関数にバインドできます。

def func(g,h,i):
    return i*(g+h)

print map(functools.partial(func, 2,3), range(20))

# [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

位置パラメータをバインドするには、hkpeprah の回答に記載されているようなラムダ式を使用します。

于 2013-06-04T18:07:21.293 に答える