Clojure如何与Scipy和Numpy配合使用

4
有没有好的方法可以在Clojure中调用Python,以便使用scipy、numpy、scikit-learn等数据科学工具呢?
我知道有一些Clojure的实现是基于Python而不是Java的,但这对我来说行不通,因为我还需要调用Java库。我也了解Jython,但我不知道如何干净地将其与Clojure结合使用。
我想在项目中使用Clojure,因为我更喜欢它作为一种语言,但我不能否认Python拥有一个令人难以置信的社区和一些最美丽、设计最好的库。

你可以尝试使用Clojure的core.matrixIncanter,也许能满足你的一些需求。(我不太了解scipy或numpy,所以不能给出正式答案。) - Mars
3个回答

5
与其试图让Jython同时与Clojure和numpy/scipy协作,您可以使用Hy。它托管于Python平台,并且与Clojure有些相似。
如果您真的想使用numpy/scipy,您可以使用Python(或Hy)编写后端并将其作为一个单独的服务运行。如果您特别喜欢Ring,或者不能没有Instaparse,您可以在Clojure中编写前端。
另外,Python有EDN库。将其整合到Hy中,或从头开始编写一个EDN库是个有趣的项目。

这个 Hy 真是太棒了。 - pneumatics
谢谢你的建议。我知道这可能有点困难,但我想问一下是否有一种好的方法来混合使用Clojure和Python机器学习工具。我更喜欢用Clojure编写代码,因此我的大部分机器学习堆栈都是由Python/Java组合编写的。我希望能够找到一个很好的封装scipy/numpy功能的包装器。 - particleq
我也在寻找一种方法,可以在使用scipy/numpy的同时编写自己的算法,而不会失去太多python的效率。 - particleq
假设您已经找到了Clojure / Java和Python / Scipy / Numpy之间的良好桥梁...那么使用混合Numpy内容和您在Clojure中编写的新算法进行计算不是很奇怪吗?来回切换。此外,如果其他开发人员要在此代码库上工作,他们是否会很难跟进正在发生的事情?因为即使您可以将所有内容放入单个存储库中,但就我而言,您将拥有两个应用程序和两个代码库。因为Clojure和Numpy之间的(认知和运行时)距离远大于Java和Clojure之间的距离。 - muhuk

0

试试toolz库吧,它是一个为Python设计的函数式标准库,通常遵循Clojure标准库的API

除此之外,我鼓励你找到计算之间的接缝,并根据具体情况使用Clojure或Python以Unix方式编写单独的工具。通过管道传输数据,可以选择文本/JSON格式或使用二进制序列化格式如Protobuf,它在Java和Python中都有标准的API。

如果你拿枪指着我的头让我构建Clojure/Python互操作性,我会从py4j开始,通过Java接口将两种语言桥接起来,在Python类中使用implements成员,在Clojure方面使用reify


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接