Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cython类numpy固定大小数组声明_Python_Cython - Fatal编程技术网

Python Cython类numpy固定大小数组声明

Python Cython类numpy固定大小数组声明,python,cython,Python,Cython,我试图在cython类中启动一个固定大小的数组,以便多个方法可以使用它。如何做到这一点 cdef class My Class: cdef public np.ndarray[np.float, ndim=1] myarr def __cinit__(self,int history_length): self.myarr = np.empty(history_length, dtype=np.float) 我得到一个错误,说: 缓冲区类型仅允许作为函数局部变量

我试图在cython类中启动一个固定大小的数组,以便多个方法可以使用它。如何做到这一点

cdef class My Class:
    cdef public np.ndarray[np.float, ndim=1] myarr
    def __cinit__(self,int history_length):
        self.myarr = np.empty(history_length, dtype=np.float)
我得到一个错误,说:

缓冲区类型仅允许作为函数局部变量

是否有方法声明此项并访问此项


谢谢

我相信cython中更喜欢缓冲区语法类型[::1]

import numpy as np
cimport numpy as np
cdef class MyClass:
    cdef float[::1] myarr
    def __cinit__(self,int history_length):

        self.myarr = np.empty(history_length, dtype=np.float)

编辑:上面的代码假设您在内存中定义了一个连续的数组,默认情况下,numpy数组是c样式(即行连续)。定义它float[:]将表明您期望的浮点缓冲区不一定是连续的。

我认为cython中首选缓冲区语法类型[::1]

import numpy as np
cimport numpy as np
cdef class MyClass:
    cdef float[::1] myarr
    def __cinit__(self,int history_length):

        self.myarr = np.empty(history_length, dtype=np.float)

编辑:上面的代码假设您在内存中定义了一个连续的数组,默认情况下,numpy数组是c样式(即行连续)。定义它float[:]将表明您期望的浮点缓冲区不一定是连续的。

是否尝试在pxd中将其定义为类属性?是否相关?是否尝试在pxd中将其定义为类属性?是否相关?对应于python float类型的double[::1]不确定这是否在cython中成立,例如,还可以向double注册数据类型。但是你是对的,python没有float和double的区别。double[::1]对应于python的float类型不确定这在cython中是否成立,例如,dtype也可以注册为double。但你是对的,python没有浮点和双精度的区别。