Python 我的numpy数组在cython中表现得很奇怪
好的,我按照Cython文档上的说明让Cython识别numpy数组。这是我剧本的“序言”Python 我的numpy数组在cython中表现得很奇怪,python,arrays,numpy,cython,Python,Arrays,Numpy,Cython,好的,我按照Cython文档上的说明让Cython识别numpy数组。这是我剧本的“序言” from __future__ import division import numpy as np cimport numpy as np DTYPE = np.int ctypedef np.int_t DTYPE_t 老实说,我不确定这行ctypedef np.int\u t DTYPE\u t到底是做什么的,因为我不确定为什么会有后缀\u t。不过,它现在似乎可以很好地处理numpy阵列
from __future__ import division
import numpy as np
cimport numpy as np
DTYPE = np.int
ctypedef np.int_t DTYPE_t
老实说,我不确定这行
ctypedef np.int\u t DTYPE\u t
到底是做什么的,因为我不确定为什么会有后缀\u t
。不过,它现在似乎可以很好地处理numpy阵列,所以我没有抱怨。现在问题就在这里:
我有两个文件叫做cell\u spk和cell\u dirs。这两个都是文本文件,我分别为它们发布了和的要点。正如你所看到的,它们只是5x8个数字数组。现在的问题是,当我把这些东西装进去,并试图进行操作时,它就是不起作用这是我代码的要点(警告,很长),也是我的安装文件。现在我没有编写大函数,事实上这只是我实际计算的一个片段,但这就是我的错误所在,所以我只发布这一部分。本质上,我需要platemethod函数,但是调用platemethod函数会导致错误“TypeError:无法将numpy.int64转换为numpy.ndarray”。我不确定到底出了什么问题,为什么它一开始就试图转换它??如果这是一个相当大的问题,我很抱歉
编辑:我应该提到这个函数曾经是一个python脚本,我将它“翻译”为cython(尽我所能)你的问题是你在第99行定义了
IX
(和IY
和IXY
和…)类型np.ndarray
。Cython的要点是,您可以将变量指定为静态类型,这是使用cdef完成的,在这些情况下您已经完成了。如果变量的类型为np.ndarray
,则不能为其指定其他类型
sum(IX)
沿数组求和,在本例中,返回类型为numpy.int64
的对象,该对象不能分配给IX
。您需要使用不同的变量名,可以是cdef'd(静态类型),也可以只是一个普通的python对象。ctypedef np.int\t DTYPE\t
只需为np.int\u t
创建一个别名,这个类型在C中是有意义的。当某个对象是cdef'd时,您应该使用这样的类型来声明它。您不需要使用上面的两行;您可以用np.int\u p
替换DTYPE\u t
的每个实例,用np.int
替换DTYPE
(这是一个python对象)。您可以发布更多的回溯吗?具体地说,你是在哪一行收到这个错误的?@HenryGomersall抱歉,我花了很长时间才回答。是它吐出来的谢谢你真的救了我的命