Cython: преобразовать представление памяти в массив NumPy

Как преобразовать типизированное представление памяти в массив NumPy в cython? Документы имеют

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

Копирование или нет не столь решительно. Я не мог найти никакой помощи в этом.

Ответ 1

Вы должны просто использовать np.asarray непосредственно в самом окне памяти, поэтому что-то вроде:

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'>

Примечание. Я использую расширение cythonmagic для IPython.