如何在Cython中声明numpy.bool类型?
解决Cython中numpy.bool类型的ctypedef问题
我太懂你在Cython里折腾numpy布尔类型typedef时的崩溃感了——这确实是个容易踩的小坑,官方文档的表述得结合实际类型名调整才管用。
先拆解下你尝试的几种方法为啥会报错:
np.bool_t和np.bint_t根本不是Cython能识别的编译时类型标识符,numpy的布尔类型在Cython里有专属的对应方式;- 直接引入libcpp的
bool只能拿到C++原生布尔类型,和numpy数组里的布尔类型完全不匹配,混用只会触发类型错误。
给你两种场景下的正确处理方案:
1. 仅定义编译时的numpy布尔类型
如果只是需要在Cython静态类型声明里用,直接用Cython为numpy布尔类型提供的专属别名:
import numpy as np cimport numpy as np # 绑定numpy布尔类型的编译时标识符 ctypedef np.npy_bool DTYPE2_t
这里的np.npy_bool就是和numpy运行时np.bool完全对应的编译时类型,能完美适配numpy布尔数组的元素操作。
2. 同时定义运行时类型对象和编译时类型
如果既要用它创建numpy数组,又要在Cython里做静态类型声明,可以这么写:
import numpy as np cimport numpy as np # 运行时类型对象(用来创建numpy数组) DTYPE2 = np.bool_ # 编译时类型标识符(Cython静态声明用) ctypedef np.npy_bool DTYPE2_t
这里用np.bool_而非np.bool是为了避免和Python原生bool类型混淆,在新版本numpy里两者是别名,但显式用np.bool_会更清晰。
内容的提问来源于stack exchange,提问作者Stone
相关产品推荐
相关产品推荐

