Cython:如何解决TypeError:无法将memoryviewslice转换为numpy.ndarray?

时间:2015-01-20 02:43:23

标签: python numpy cython

在random_stuff_printer.pyx文件中,我有一个cdef函数,看起来像这样:

cdef np.ndarray[np.float64_t, ndim=4] randomizer():
    return np.random.random((4, 4, 4, 4))

然后我有一个def函数看起来像这样,在同一个random_stuff_printer.pyx中:

def random_printer():
    random_stuff = randomizer()
    print random_stuff

我编译文件,并调用random_printer,但是我收到以下错误:

TypeError: Cannot convert random_stuff_printer._memoryviewslice to numpy.ndarray

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

我认为这是让defcdefcimportimport保持一致的问题。这里有一些适合我的代码:

import numpy as np
cimport numpy as cnp

cdef cnp.ndarray[cnp.float64_t, ndim=4] randomizer():    
    return np.random.random((4, 4, 4, 4))

def random_printer():
    cdef foo = randomizer()
    print(foo)

例如,请参阅此笔记本:http://nbviewer.ipython.org/gist/arokem/6fa00ceb17e16c367c8a