Cython“不允许在常量表达式中使用”,boundscheck False无效

Cython“不允许在常量表达式中使用”,boundscheck False无效,第1张

Cython“不允许在常量表达式中使用”,boundscheck False无效

失败与无关

cython.boundscheck

边界检查只是检查您是否尝试访问不存在的数组元素。例如,如果您有一个大小为4的数组并尝试访问元素5-

boundscheck(True)
它将给您一个Exception,
boundscheck(False)
它会导致未定义的行为(可能导致分段错误)。

编译失败的原因是另一个:您不能创建具有动态长度的静态数组!需要在编译时知道元素的数量,这只是c强制执行的(我想)。

但是,您可以定义

r
在编译时已知:

DEF r=4cimport cython@cython.boundscheck(False)def boundtest():    cdef double l[r]

但是,您可以简单地创建一个NumPy数组并将其存储在memoryview变量中:

cimport cythonimport numpy as np@cython.boundscheck(False)def boundtest():    cdef int r=4    cdef double[:] l = np.empty(r, dtype=np.double)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5667095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存