python - 我的 numpy 数组在 cython 中表现异常

标签 python arrays numpy cython

好的,所以我按照 Cython 文档上的说明让 numpy 数组被 cython 识别。这是我脚本的“序言”

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 的数字数组。现在的问题是,当我加载这些并尝试进行操作时,它就不会工作。 Here这是我的代码的要点(警告,它很长)和 here是我的安装文件。现在我没有写大函数,实际上这只是我实际计算的一个片段,但这是我的错误所在,所以我只发布这一部分。本质上,我需要 platemethod 函数但是调用 platemethod 函数给我一个错误“TypeError:无法将 numpy.int64 转换为 numpy.ndarray”。我不确定出了什么问题,为什么它会首先尝试转换它?如果这是一个相当大的问题,我很抱歉。

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

最佳答案

您的问题是您已将 IX(以及 IYIXY 以及...)定义为 np 类型。第 99 行的 ndarray。关于 Cython 的要点是您可以将变量分配为静态类型,您可以使用 cdef 执行此操作,在这些情况下您已经完成了。鉴于该变量的类型为 np.ndarray,您不能再为其分配其他类型。

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

关于python - 我的 numpy 数组在 cython 中表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20384036/

相关文章:

python - 检查数字在哪个范围内

python:spyder:运行 ipdb 时无法在控制台中编辑先前的命令

python - 将日期时间转换为 POSIX 时间

python - openCV 阈值负值

python - 根据另一个数据框的行范围添加/填充 Pandas 列

javascript - 带 if 语句循环的空数组

java - 将ArrayList插入Oracle表中

java - 在 Java 中初始化对象类中的静态数组

python - 使用 Pickle 保存 Numpy 数组

python - python中不同形状数组的逐元素乘法