Python 加速Numpy向量和C++/DLL单浮点函数

Python 加速Numpy向量和C++/DLL单浮点函数,python,numpy,dll,Python,Numpy,Dll,问:是否有类似于numpy.(C/C++)矢量化的东西 假设我有一个 NoMPy < /C>向量和一个C++ DLL(带有C外部接口),包含一个函数,接受浮点并返回一个浮点(没有数组!)。使用ctypes我可以包装DLL函数并对其执行numpy.vectorize,这样我就可以编写: myfunc = numpy.vectorize(lambda x: ctypes_wrapped_DLL_fun(x)) x_vec = numpy.linspace(...) # a vector print

问:是否有类似于
numpy.(C/C++)矢量化的东西

假设我有一个<代码> NoMPy < /C>向量和一个C++ DLL(带有C外部接口),包含一个函数,接受浮点并返回一个浮点(没有数组!)。使用

ctypes
我可以包装DLL函数并对其执行
numpy.vectorize
,这样我就可以编写:

myfunc = numpy.vectorize(lambda x: ctypes_wrapped_DLL_fun(x))

x_vec = numpy.linspace(...) # a vector
print myfunc(x_vec)
工作起来很有魅力。当然,这个函数调用很慢,因为它必须从C-ish numpy上下文中通过python、DLL传递每个值,然后返回

我找到了一份工作。基本上只有关于Cython 2.8.5.2的章节。“Numpy支持”说明了如何处理向量,而无需始终使用向量的每个元素通过Numpy/python/C接口。这样做的缺点是,我必须将DLL的接口从简单的浮点更改为数组(它喜欢崩溃,因为我可能做错了事情)

也似乎不是我需要的,因为它还需要DLL有一个数组接口


任何好的例子(?我不介意使用Cython或另一个需要编译器的解决方案。我强烈希望不要更改DLL的接口。

您可以使用numpy机制和逐点浮点到浮点函数创建一个全新的ufunc,请参阅,以获得包含Cython代码的已编制示例。我尝试了这个(ufunc)我不得不承认我对C/C++和编译器很糟糕。它对你有用吗?