0

いくつかの奇妙な理由で、Python で使用されているイテレータ/ジェネレータに頭を悩ませています (C++ で問題なく記述/使用していますが、Python を使用してイテレータ/ジェネレータを記述する方法を理解できないようです)。

次の形式の数学関数があります。

f(a,b) = ( v1(a) - v1(b) ) / ( v2(a) - v2(b) )

ここで、v1 と v2 は同じ長さの 1D ベクトルです。

上記で定義した f() の出力を生成する関数 (実際にはジェネレーター) を作成したいと考えています。

誰でも助けることができますか?

[[編集]]

私の表記がわかりにくかったかもしれません。それを明らかにしたいと思います。上記の関数は一連の値を返します。引数 b が値を取ると、間隔で(a,b]

したがって、たとえば を呼び出すと、関数は次のf(1,5)を返します(関数ではありません。以下の説明がさらに混乱を招く場合があります)。

f(1,1)
f(1,2)
f(1,3)
f(1,4)
f(1,5)
4

2 に答える 2

1

ジェネレータ式を使用できます:

def f(a, b):
  return ((v1[a] - v1[i]) / (v2[a] - v2[i]) for i in xrange(a, b+1))

またはジェネレータ関数

def f(a, b):
  for i in xrange(a, b+1)
    yield (v1[a] - v1[i]) / (v2[a] - v2[i])
于 2012-05-14T05:29:21.460 に答える
0

反復がないため、ジェネレータはそのように見える場合があります(正しく記載されているように)。

def f(a, b):
    yield (v1[a] - v1[b]) / (v2[a] - v2[b])  # be careful about division!

カップルノート:

  • 反復するものはなく、ジェネレータは通常、反復で使用されます。
  • 除算に注意してください。Python2.xでは、とが両方とも整数(so )のa / b場合、整数を返します。これは、 sまたはを使用して回避できます。ab4 / 3 == 1floatfrom __future__ import division
于 2012-05-13T20:05:14.410 に答える