繁体   English   中英

Cython类,用零创建NumPy

[英]Cython Class, create NumPy with Zeros

我试图创建一个cython类,该类创建一个带有零的NumPy。 后来我想在那个Numpy中写浮点值...我的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的情况下创建零(100、100)的NumPy而苦苦挣扎。 那有可能吗? 我对cython并不是很熟悉,很抱歉,如果我问一些非常琐碎的问题!

非常感谢您的所有帮助和建议!

重新定义您的课程::

  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声明为支持缓冲区的类型(在我的示例中为memoryview),然后将ndarray复制到其中。

附带说明eTest ,我直接将零ndarray分配给eTest

cdef class test:
      cdef double[:,:] eTest
      def __init__(self, b):
          self.eTest =  np.zeros((100,100), dtype=FTYPE)

但是我保留了您的结构,以防您需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM