好的,所以我按照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的文件。这些都是文本文件,我分别发布了here和here的要点。正如您所看到的,它们只是5x8数组。现在的问题是,当我加载这些并尝试进行操作时,它只是WONT工作。 Here是我的代码的主旨(警告,很长),here是我的设置文件。现在我没有写大函数,事实上这只是我实际计算的一小部分,但这是我的错误所在,所以我只发布这一部分。本质上,我需要platemethod函数,但是调用platemethod函数会给我一个错误“TypeError:无法将numpy.int64转换为numpy.ndarray”。我不确定会出现什么问题,为什么它会首先尝试将其转换?如果这是一个相当大的问题,我很抱歉。
编辑:我应该提到这个函数曾经是一个python脚本,我将它“翻译”为cython(尽我所能)答案 0 :(得分:3)
您的问题是您已将IX
(以及IY
和IXY
和...)定义为第99行的np.ndarray
类型。关于Cython的观点是您可以将变量分配给静态类型,这与您在这些情况下执行的cdef一样。如果变量属于np.ndarray
类型,则无法为其指定其他类型。
sum(IX)
在数组中求和,在这种情况下,返回numpy.int64
类型的对象,该对象无法分配给IX
。您需要使用不同的变量名,可以是cdef(和静态类型),也可以只是普通的python对象。