我正在尝试创建一个用零创建NumPy的cython类。后来我想写那个Numpy中的float值... 我的python类看起来像这样:
class test:
def __init__(self, b):
self.b = b
self.eTest = np.zeros((100, 100))
到目前为止,我的cython类看起来像这样:
import numpy as np
cimport numpy as np
FTYPE = np.float
ctypedef np.float_t FTYPE_t
cdef class test:
def __init__(self, b):
cdef np.ndarray[FTYPE_t, ndim=2, mode='c'] eTest <<<works fine without this line
self.eTest = np.zeros((100,100), dtype=FTYPE)
我的cython代码到目前为止还没有工作。我正在努力解决如何在没有任何Python的情况下创建NumPy零(100,100)的问题。这甚至可能吗?我对cython并不熟悉,如果我问一些非常微不足道的问题,我很抱歉!
非常感谢您提供的所有帮助和建议!
答案 0 :(得分:1)
重新定义你的课程::
cdef class test:
cdef double[:,:] eTest
def __init__(self, b):
cdef np.ndarray[FTYPE_t, ndim=2, mode='c'] tmp
tmp = np.zeros((100,100), dtype=FTYPE)
self.eTest = tmp
您的ndarray(在这种情况下为tmp
)只能是函数的本地函数(在本例中为构造函数),因此您应该将第一个eTest
声明为缓冲区支持类型(内存中的视图)我的例子)然后将ndarray复制到它。
作为旁注,我会直接将零ndarray分配给eTest
:
cdef class test:
cdef double[:,:] eTest
def __init__(self, b):
self.eTest = np.zeros((100,100), dtype=FTYPE)
但是我保留了你的结构以备不时之需。