60734


漸化式となる関数からnumpy配列を高速に生成する方法を探しています。

ある実数値 `a0` と 関数 `f(x)` が定まっているとして、以下のコードをなるたけ実行効率をよくするにはどうすればいいでしょうか。

[code]

    a = a0
    L = [a]
    for i in range(100):
        a = f(a)
        L += [a]
    
[/code]

何卒、ご教示ください。


CC BY-SA 4.0
2019-11-21T10:25:25.627
60733
2019-11-21T12:05:30.703
28998
question
python python3 numpy
漸化式からnumpy配列を生成する


どうしても再帰的にしか処理できないのであれば、for ループをどれだけ速く回せるかという話になりそうです。

となると、Numba の JIT コンパイルや Cython のコンパイルを使って高速化するのがひとつの手段です。以下は Cython のコード例です。

[code]

    %%cython
    import numpy as np
    cimport numpy as np
    cimport cython
    
    cdef np.float64_t f(np.float64_t x):
      return 3.5 * x * (1 - x)
    
    cdef np.ndarray[np.float64_t, ndim=1] generate_by_cython(int n):
      cdef np.ndarray[np.float64_t, ndim=1] a = np.empty(n, dtype=np.float64)
      a[0] = 0.5
      for i in range(n - 1):
        a[i + 1] = f(a[i])
      return a
    
[/code]


CC BY-SA 4.0
2019-11-21T12:05:30.703
60734
2019-11-21T12:05:30.703
19110
60733
answer