【问题标题】:clojure working with scipy and numpyclojure 使用 scipy 和 numpy
【发布时间】:2023-03-24 06:44:02
【问题描述】:

有没有什么好的方法可以从 clojure 调用 python 作为使用 scipy、numpy、scikit-learn 等进行数据科学的一种方法。

我知道在 python 而不是 java 上运行的 clojure 实现,但这对我不起作用,因为我还需要在我的项目中调用 java 库。我也知道 Jython,但我不知道将它与 Clojure 一起使用的干净方法。

我想在我的项目中使用 Clojure,因为我更喜欢它作为一种语言,但我不能否认 Python 拥有一个令人难以置信的社区,以及一些最漂亮、设计良好的库。

【问题讨论】:

  • 您可以从 Clojure 的 core.matrixIncanter 获得一些您想要的东西。 (我对 scipy 或 numpy 不太了解,因此无法将其作为官方答案。)

标签: python numpy clojure jython data-science


【解决方案1】:

您现在可以使用 Graal VM。尽管一些大公司正在生产中使用它,但仍处于早期阶段。下面是一个从 Clojure 使用 Python 的示例:

(.eval context "python" "
import time;
time.clock()
")

http://gigasquidsoftware.com/blog/2017/10/22/embedded-interop-between-clojure-r-and-python-with-graalvm/

【讨论】:

    【解决方案2】:

    toolz library a try, it's a functional standard library for Python that was designed to generally adhere to the API of the Clojure standard library

    除此之外,我鼓励您找到计算之间的接缝,并以 Unix 方式在 Clojure 或 Python 中编写单独的工具,具体取决于哪个似乎最适合该用例。在工具之间序列化数据,可以通过管道作为文本/JSON,也可以使用像 Protobuf 这样的二进制序列化格式,它具有 Java 和 Python 的标准 API。

    如果你有枪指着我说要构建 Clojure/Python 互操作,我会从 py4j 开始并通过 Java 接口连接两种语言,在 Python 类中使用 implements 成员和 @987654325 @ 在 Clojure 方面。

    【讨论】:

      【解决方案3】:

      您可以使用Hy,而不是试图让 Jython 与 Clojure 和 numpy/scipy 一起玩得很好。它托管在 Python 上,有点类似于 Clojure。

      如果我真的想使用 numpy/scipy,我会用 Python(或 Hy)编写后端,将其作为单独的服务运行。如果我真的很喜欢 ring,或者不能没有 Instaparse,我会在 Clojure 中编写一个前端。

      顺便说一句,Python 有 EDN 库。将其中一个集成到 Hy 中,或者从头开始编写一个,将是一个有趣的项目。

      【讨论】:

      • 这 Hy 的东西太棒了。
      • 感谢您的建议。我知道这可能有点多,但我想问是否有混合 Clojure 和 Python 机器学习工具的好方法。我更喜欢用 clojure 编写,所以我目前的大部分机器学习堆栈都是用 python/java 组合编写的,我想我希望可能有一个很好的 scipy/numpy 功能包装器
      • 我也在寻找一种方法,让我可以在 scipy/numpy 旁边编写自己的算法,而不会因使用 python 而损失太多效率。
      • 假设你已经在 Clojure/Java 和 Python/Scipy/Numpy 之间找到了一座很好的桥梁... 做混合 Numpy 的东西和你写的新算法的计算不是很奇怪吗在 Clojure 中?来回走动。此外,如果其他开发人员要在此代码库上工作,他们不会很难跟进正在发生的事情吗?因为即使您可以将所有内容放在一个存储库中,就我而言,您将拥有两个应用程序和两个代码库。因为 Clojure 和 Numpy 之间的(认知和运行时)距离远大于 Java 和 Clojure 之间的距离。
      猜你喜欢
      • 2012-06-22
      • 2016-04-17
      • 2016-05-05
      • 2020-03-28
      • 2016-11-06
      • 2015-12-04
      • 2014-07-12
      • 2012-11-25
      • 1970-01-01
      相关资源
      最近更新 更多