我的numpy数组在cython中表现得非常奇怪

时间:2013-12-04 19:21:17

标签: 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_t DTYPE_t行到底是什么,只是因为我不确定为什么会有后缀_t。然而它现在好像处理numpy阵列很好,所以我不抱怨。现在问题在于:

我有两个名为cell_spks和cell_dirs的文件。这些都是文本文件,我分别发布了herehere的要点。正如您所看到的,它们只是5x8数组。现在的问题是,当我加载这些并尝试进行操作时,它只是WONT工作。 Here是我的代码的主旨(警告,很长),here是我的设置文件。现在我没有写大函数,事实上这只是我实际计算的一小部分,但这是我的错误所在,所以我只发布这一部分。本质上,我需要platemethod函数,但是调用platemethod函数会给我一个错误“TypeError:无法将numpy.int64转换为numpy.ndarray”。我不确定会出现什么问题,为什么它会首先尝试将其转换?如果这是一个相当大的问题,我很抱歉。

编辑:我应该提到这个函数曾经是一个python脚本,我将它“翻译”为cython(尽我所能)

1 个答案:

答案 0 :(得分:3)

您的问题是您已将IX(以及IYIXY和...)定义为第99行的np.ndarray类型。关于Cython的观点是您可以将变量分配给静态类型,这与您在这些情况下执行的cdef一样。如果变量属于np.ndarray类型,则无法为其指定其他类型。

sum(IX)在数组中求和,在这种情况下,返回numpy.int64类型的对象,该对象无法分配给IX。您需要使用不同的变量名,可以是cdef(和静态类型),也可以只是普通的python对象。