web-dev-qa-db-ja.com

Cython:メモリビューをNumPy配列に変換します

型付きメモリビューをcythonでNumPy配列に変換する方法は?ドキュメントには

cimport numpy as np
import numpy as np

numpy_array = np.asarray(<np.int32_t[:10, :10]> my_pointer)

私はこれを私の場合に取った

np.asarray(<np.float_t[:, :]> my_memview)

これを使用すると、コンパイラは次のように通知します。

Can only create cython.array from pointer or array

コピーするかどうかはそれほど決定的ではありません。私はこれについて何の助けも見つけることができませんでした。

20
embert

np.asarrayをmemoryview自体で直接使用できるはずなので、次のようになります。

np.asarray(my_memview)

動作するはずです。たとえば、cythonソースファイルに次のものが含まれている場合:

import numpy as np
cimport numpy as np
def test(double[:,:] x):
    print type(x)
    print type(np.asarray(x))

それをコンパイルした後、python側から次のことができるはずです:

a = np.random.normal(size=(5,5))
test(a)

これにより、次の出力が生成されます。

<type '_cython_magic_0182fca918bfa3618c3553e51b13e8ba._memoryviewslice'>
<type 'numpy.ndarray'>

注:IPython用のcythonmagic拡張機能を使用しています。

23
JoshAdel