【发布时间】:2018-04-08 07:33:10
【问题描述】:
根据官方文档: 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
提高: 'bint_t' 不是类型标识符
(3) 在 .pyx 文件顶部添加:
from libcpp cimport bool
#? As recommended by McKelvin in [https://stackoverflow.com/questions/24659723/cython-issue-bool-is-not-a-type-identifier][2]
#from libcpp cimport bool_t
from libcpp.vector cimport vector
没有帮助!
(4) 我看过帖子: Declaring a numpy boolean mask in Cython 但是我需要在函数的参数中定义变量来传递一个 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 时它可以正常工作。
【问题讨论】: