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

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


person embert    schedule 07.01.2014    source источник


Ответы (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.

person JoshAdel    schedule 07.01.2014
comment
Может быть, это было слишком просто. Теперь компилируется нормально. Не могли бы вы проверить мои другой вопрос? Я не решился расширить это - person embert; 07.01.2014
comment
это не работает для структурных типов? Он возвращает TypeError: ожидается читаемый объект буфера - person Rok; 05.08.2016