(この質問は、実際のコピー&ペースト作業の例がなくても専門家が簡単に答えることができると思うので、余分な時間は割きませんでした…)
整数の配列を返す C++ メソッドがあります。
int* Narf::foo() {
int bar[10];
for (int i = 0; i < 10; i++) {
bar[i] = i;
}
return bar;
}
そのクラスのCythonのものを作成しました:
cdef extern from "Narf" namespace "narf":
cdef cppclass Narf:
Narf() except +
int* foo()
そして、これらは私のPythonラッパーです:
cdef class PyNarf:
cdef Narf c_narf
def __cinit__(self):
self.c_narf = Narf()
def foo(self):
return self.c_narf.foo()
問題はfoo
メソッドとそのint*
戻り値の型です (この例に挙げていない他のメソッドは問題なく動作します!)。コンパイルされず、次のエラーが発生します。
def foo(self):
return self.c_narf.foo()
^
------------------------------------------------------------
narf.pyx:39:37: Cannot convert 'int *' to Python object
もちろん、明らかにint *
戻り型として受け入れません。この問題を解決するにはどうすればよいですか? これを numpy 配列にラップする簡単な方法はありint *
ますか (numpy の方が好きです)、またはこれをどのように処理する必要がありますか?
また、大きなファイルなどを読み込んでいるため、ここでメモリを処理する方法もわかりません。