0

たとえば、xとyのリストを設定しました

x=[1,2,3,4,5,6]
y=[1,4,9,16,25,36]

そして、次のように定義された一連の u の y 値を見つける必要があります。

u = [[2,3,1],[4,2,1],[6,3,2],[2,4,5],[2,3,6]]

この補間モジュールを使用しています。numpy interpolate に似ています

現在、私はフォローしています:

v = [interp(x,y,u[i]) for i in range(len(k))]

計算時間が長くなるため、for ループを回避する方法はありますか。時間の代わりに記憶を惜しみません。私のリストのサイズは非常に大きいです!組み込みの地図機能が使えればいいのですが、使い方がわかりません。

4

1 に答える 1

3

map()内部的にもループします - より高速なC側でのみ実行します。ただし、リスト内包表記を既に使用しています。これも C にオフロードされ、おそらく よりも高速ですmap()

とはいえ、ループを変更することで、ここで速度と読みやすさを向上させる機会があります。

v = [interp(x, y, i) for i in u]

Python では、インデックスではなく反復子をループします。以前のように間接的にループすると、ループが大幅に遅くなります。また、はるかに読みにくくなります。

の使用に関しては、事前に入力された を呼び出す関数を作成するために使用map()できます。functools.partial()interp()xy

import functools
f = functools.partial(interp, x, y)
v = list(map(f, u))

ただし、前に述べたように、これはおそらく遅くなり、読みにくくなります。

(この回答では、CPythonを使用していると仮定してC側という用語を使用していますが、他の実装では、利用可能な下位レベルのオプションを使用して、より効率的に実装されます)。

于 2012-11-22T12:40:13.707 に答える