Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 我的numpy数组在cython中表现得很奇怪_Python_Arrays_Numpy_Cython - Fatal编程技术网

Python 我的numpy数组在cython中表现得很奇怪

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阵列

好的,我按照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阵列,所以我没有抱怨。现在问题就在这里:

我有两个文件叫做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抱歉,我花了很长时间才回答。是它吐出来的谢谢你真的救了我的命