gpt4 book ai didi

cython - 缓冲区拆包未优化,但仅使用 1d Numpy 数组

转载 作者:行者123 更新时间:2023-12-05 08:01:29 27 4
gpt4 key购买 nike

我在 cython 中遇到一个内联函数的问题

cdef inline int binary_search(np.ndarray[np.float_t,ndim=1] cumsum, double rdn):
cdef int mi=0,ma=len(cumsum)-1,pos
while True:
if ( mi > ma):
break
pos = (mi+ma) / 2
if (rdn <= cumsum[pos] ):
ma=pos-1
else:
mi=pos+1
return mi-1

但是,我遇到以下问题:缓冲区解包未优化。

我听说这是处理多维数组时的一个问题,但对我来说不是这样。

感谢您的帮助

最佳答案

我在使用 Cython 3.0.0a10 时收到相同的警告。
jcrudy 在评论中所说的是真实的,即删除 inline 将删除警告。
尽管如此,该警告可能暗示直接传递数组而不是内存 View 会导致函数调用的开销。
这在 Cython documentation 中有描述。 .

在我的例子中,使用内存 View 而不是数组作为参数解决了问题,而无需删除内联。上面的函数看起来像这样(如果使用 float32):

cdef inline int binary_search(np.float32_t[:] cumsum, double rdn):

请记住,创建内存 View 会增加一些开销,但由于在您的函数中您没有修改 cumsum,因此将内存 View 作为参数传递给函数是完全有意义的.

关于cython - 缓冲区拆包未优化,但仅使用 1d Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com