根据官方文档:http://docs.cython.org/en/latest/src/tutorial/numpy.html,我们应该“ctypedef”一个相应的编译时类型,但我尝试了几种方法来处理numpy.bool,仍然出现错误。
1.
DTYPE2 = np.bool
ctypedef np.bool_t DTYPE2_t
抛出异常:'bool_t' 不是一个类型标识符
2.
DTYPE2 = np.bint
ctypedef np.bint_t DTYPE2_t
raise:“bint_t”不是类型标识符
3. 在.pyx文件的顶部添加:
from libcpp cimport bool
#? As recommended by McKelvin in [https://dev59.com/HWAf5IYBdhLWcg3wbSQh][2]
#from libcpp cimport bool_t
from libcpp.vector cimport vector
没什么帮助!
4. 我看到了这篇文章: 在Cython中声明numpy布尔掩码 但是我需要在函数参数中定义变量,以便传递一个numpy.bool数组。
def Func(np.ndarray[np.bool_t, ndim=1] f)
## def Func(np.ndarray[np.bool, ndim=1] f)
错误: 无效的类型
5. 忽略声明吗?根据官方文档,如果我想加快函数的速度,似乎在函数的参数中需要声明:
def naive_convolve(np.ndarray[**DTYPE_t**, ndim=2] f, np.ndarray[DTYPE_t, ndim=2] g):
那么我应该如何处理numpy.bool呢?
我的测试基于以下简单的代码:
import numpy as np
cimport numpy as np
cimport cython
DTYPE2 = np.bint
ctypedef np.bint_t DTYPE2_t
def Func(np.ndarray[DTYPE2_t, ndim=1] npdata):
print(npdata)
cython:最新版本
windows7 操作系统
我确定 cython 已经正确安装。当没有 np.bool 时,它可以正常工作。