为了账号安全,请及时绑定邮箱和手机立即绑定

与ndfilter匹配的numba ctype

与ndfilter匹配的numba ctype

繁星淼淼 2021-05-13 14:50:29
我正在尝试将Numbacfunc用作scipy.LowLevelCallable内部,ndi.generic_filter但是我面临签名匹配的问题。如果我将返回类型设置为int16它,short则将其识别为好像我设置为int32或intc它说long。这两个签名不能匹配。匹配的问题是返回类型import numpy as npimport scipyfrom numba import cfunc, carray, typesimport scipy.ndimage as ndi@cfunc("intc (CPointer(float64),intp, CPointer(float64), voidptr)") #problematicdef myfunc(values_ptr, len_values, result, data):    #some work here    return 1footprint = np.array([[0, 1, 0],[1, 1, 1],[0, 1, 0]], dtype=bool)from scipy import ndimage as ndia=np.random.random((100,100))ndi.generic_filter(a, scipy.LowLevelCallable(myfunc.ctypes), footprint=footprint)这是错误:ValueError: Invalid scipy.LowLevelCallable signature "long (double *, long, double *, void *)". Expected one of: ['int (double *, intptr_t, double *, void *)', 'int (double *, npy_intp, double *, void *)', 'int (double *, int, double *, void *)', 'int (double *, long, double *, void *)']系统规格(如果有):Python 2.7.10(32位),Numba 0.39.0
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

看来您遇到了这个已知问题。具体而言,似乎没有办法以产生由所期望的签名LowLevelCallable上的平台与Numba其中intlong是相同的尺寸(如64种Windows的口味)。

我建议您支持GitHub上的修复程序。同时,最好的选择是直接将Numba函数传递到generic_filter并接受一些函数调用开销,或者以受支持的方式包装函数,例如通过Cython。


查看完整回答
反对 回复 2021-05-18
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信