Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从函数式语言访问numpy数组_Python_Haskell_Functional Programming_Numpy_Scipy - Fatal编程技术网

Python 从函数式语言访问numpy数组

Python 从函数式语言访问numpy数组,python,haskell,functional-programming,numpy,scipy,Python,Haskell,Functional Programming,Numpy,Scipy,我的主要语言是Python。通常,当我需要在一个麻木数组上做一些CPU重任务时,我使用ScPi.Weav.InLink来连接C++,并取得了很好的效果。 我怀疑许多算法(机器学习的东西)可以用函数式语言(scheme,haskell…)编写得更简单 我在想。是否可以从函数语言访问NUMPY数组数据(读写),而不必使用C++? < p>,我无法想象通过Haskell或NoPy使用NoMPy比编写功能Python更容易。如果您想要功能更丰富的python,请尝试使用itertools和functoo

我的主要语言是Python。通常,当我需要在一个麻木数组上做一些CPU重任务时,我使用ScPi.Weav.InLink来连接C++,并取得了很好的效果。 我怀疑许多算法(机器学习的东西)可以用函数式语言(scheme,haskell…)编写得更简单


我在想。是否可以从函数语言访问NUMPY数组数据(读写),而不必使用C++?

< p>,我无法想象通过Haskell或NoPy使用NoMPy比编写功能Python更容易。如果您想要功能更丰富的python,请尝试使用
itertools
functools

您可以看看如何使用某种共享内存数组。这一实施可能是一个良好的开端:

此实现旨在在python进程之间共享,但它使用命名共享内存来实现,因此您应该能够从任何其他进程访问相关的内存块


我对haskell还不太熟悉,因此无法在这方面给您提供任何建议,但我假设您可以在haskell中将指向共享内存缓冲区的指针用作某种数组…

如果您对使用的平台没有任何要求,您可以查看在CLI上运行的.NET和IronPython的Numpy实现。有了这个,你就可以使用F#作为函数式语言。NET上Numpy和Scipy的一些详细信息是和一个列表。

目前还没有从Python调用Haskell的单一标准方法。当然也有从C调用haskell的方法,这意味着在原则上调用haskell没有任何障碍——只是没有做过让这变得特别容易的工作

另一方面,如果您的数据结构本身并不庞大,那么将它们序列化到Haskell程序(通过命令行,或者使用客户机-服务器模型,例如thrift)是非常简单的,如果计算成本占主导地位,那么成本可能是最小的

最后,从Haskell调用Python非常容易!这方面的经典软件包是missingpy:

还有一个名为cpython的更新包,它试图更全面:


从概念上讲,我想,在Haskell中托管Python应用程序应该不是很难,而不是相反。

很抱歉投票失败,我理解这种情绪,但这是一个有效的问题,不管你是否同意动机,都应该得到一个实际的答案。这样的事情应该写在评论里,问题是速度。Python对于我运行的算法类型来说太慢了。在我的印象下,我可以写一个函数,比如Haskell,它运行得比C++快,甚至更快。如果有人想出一个方法来访问Haskell中的NoMPy或者是比优化Python代码更实用的方案,或者只是切换到一个不同的编程语言,我会感到震惊。我意识到它并没有直接回答这个问题,但我的答案仍然是“你采取了错误的方法”。不幸的是,Python(Cython或Ppyy)与C++代码竞争是不可能的。另外,完全切换到另一种语言也不起作用。我有很多需要处理的数据,Python非常适合处理这些数据(胶水语言等)。我已经有C++代码,我已经通过Python调用它。它足够快,并且与我的numpy阵列接口。我只是想知道是否可以使用函数语言而不是C++来做同样的事情,因为我怀疑算法在函数语言中会更干净。如果有任何混淆,很抱歉。我的意思是在内存中访问它,但是对于小数组/繁重的处理,可能足以将它从python保存到磁盘(或/dev/shm),在haskell中加载它,处理,保存到磁盘,从python加载。@janto-抱歉,我在您回复的同时删除了我的评论。。。回想起来,我觉得很明显你是想在内存中访问它。无论如何,正如我下面的回答详细阐述的那样,一种解决方案是为numpy数组使用共享内存缓冲区,然后从haskell(或其他)进程访问它。。。与weave等相比,这确实增加了额外的一层复杂性…@janto:您看过各种python机器学习软件包了吗?在python中可能已经有了快速的解决方案或模板来编写自己的代码。顺便说一句,谷歌搜索一下似乎表明haskell可以通过FFI与C库进行交互,反之亦然:(我不是haskell人,所以请原谅我,如果这完全是不正确的!)。如果您可以从C调用haskell例程,那么您可以通过ctypes、cython、weave等从python调用它。。。这可能是一种痛苦,但听起来是可能的。“只是”处理numpy数组存储在其中的内存缓冲区的问题…@JashAdel我正在研究的算法不太流行(与支持向量机之类的东西相比),研究仍在进行中。因此,我所做的事情(信念传播、伪可能性)甚至没有很多C实现。这可能是最简单的方法。创建在共享内存缓冲区上运行的Haskell进程相对容易。矢量包中的模块
Data.Vector.Storable
将为1D阵列提供此功能(对于更高维度,可能hmatrix可以工作)。