3

私は一日中numbaのドキュメントから型がどのように設定されているかを推測しようとしていました. 私は少し道のりを歩んできましたが、今は 1 次元配列と 2 次元配列を返し、引数の束を取る関数を作りたいと思っています。

@jit
class name(object)
    @double[:,:], double[:](double[:], double, double, int64)
    def solve(self, u0, a, b, n):
        self.t = linspace(a, b, n+1)
        dt = abs((b-a)/float(n))
        u = zeros(n+1, len([u0]))
        u[0] = u0
        u = advance(u, t, n, dt)
        return u.transpose(), t.transpose()   

上記は次の例外をスローします。

Traceback (most recent call last):
  File "/home/marius/dev/python/inf1100/test_ODE.py", line 2, in <module>
    from DE import *
  File "/home/marius/dev/python/inf1100/DE.py", line 13
    @double[:,:], double[:](double[:], double, double, int64)
           ^
SyntaxError: invalid syntax

何がうまくいかないのか教えていただければ幸いですが、これらの構文をきっぱりと厳密に説明しているドキュメントを推奨していただけるとさらによいでしょう。

お時間をいただきありがとうございます。

よろしく、マリウス

4

1 に答える 1

2

以下は、タプルを返すメソッドのより単純なバージョンです。これは、OS X で Numba 0.11.1 を使用している場合に機能します。

import numba
import numpy as np

@numba.jit
class name(object):
    @numba.object_(numba.double[:], numba.double)
    def solve(self, x, a):
        y = np.empty(x.shape[0], dtype=np.float64)
        z = np.empty(x.shape[0], dtype=np.float64)
        for k in xrange(x.shape[0]):
            y[k] = x[k] * a
            z[k] = x[k] + a

        return y, z 

それを使用して:

C = name()
a, b = C.solve(np.arange(5, dtype=np.float64), 3.0)

aとはどこですかb

In [24]: a
Out[24]:
array([  0.,   3.,   6.,   9.,  12.])
In [22]: b
Out[22]:
array([ 3.,  4.,  5.,  6.,  7.])
于 2013-12-21T21:35:23.013 に答える