从函数式语言访问numpy数组
我主要使用的编程语言是Python。每当我需要对一个numpy数组进行一些计算量大的任务时,我通常会用scipy.weave.inline把C++代码连接进来,这样效果很好。
不过我怀疑,很多算法(比如机器学习相关的)其实可以用一种更简单的函数式编程语言(像Scheme或Haskell)来写。
我在想,是否可以直接从这些函数式编程语言访问numpy数组的数据(进行读写),而不需要使用C++呢?
4 个回答
目前没有一种统一的标准方法可以让Python调用Haskell。虽然确实有方法可以让Haskell被C语言调用,这意味着原则上没有什么障碍可以让Haskell被调用,只是还没有人做出特别简单的解决方案。
另一方面,如果你的数据结构不是特别庞大,把它们传给Haskell程序是很简单的,可以通过命令行或者使用像thrift这样的客户端-服务器模型。如果计算的成本是主要考虑的因素,那么这个成本可能会很小。
最后,从Haskell调用Python是非常简单的!经典的工具包是missingpy:http://hackage.haskell.org/package/MissingPy
还有一个更新的工具包叫做cpython,试图提供更全面的功能:http://hackage.haskell.org/package/cpython
从概念上讲,我想把你的Python应用放在Haskell中应该不会太难,反过来也是如此。
你可以考虑使用某种共享内存数组。这种实现方式可能是个不错的起点:https://bitbucket.org/cleemesser/numpy-sharedmem/src
这个实现是为了让多个Python进程共享数据,它使用了命名的共享内存,所以你应该可以从其他进程访问到相关的内存块。
我对Haskell不太熟悉,没法给你这方面的建议,但我想你可以在Haskell中使用指向共享内存缓冲区的指针,把它当作某种数组来用……