【问题标题】:Numpy analog for Jython [duplicate]Jython 的 Numpy 模拟 [重复]
【发布时间】:2013-09-20 20:21:10
【问题描述】:

我正在考虑将科学代码从 Python 移植到 Jython,我很感兴趣,是否存在数学库 对于 Jython,它们是:

  1. 免费用于商业用途
  2. 具有为 Jython 设计的方便的矩阵语法 - 即允许切片、二进制和整数索引、+-*/ 操作,如 matlab 和 numpy。

机器学习和统计路径的额外可用性将是一个加分项(或将数据轻松转换为一些常见的数据格式,主要 Java 机器学习库都可以理解)。

提前感谢您提供有关此类库的任何信息。

【问题讨论】:

    标签: python numpy matrix jython slice


    【解决方案1】:

    不久前我担任了维护这样一个包的角色。它被称为 jnumeric(在 github 上可用,可通过 maven 安装)。

    JNumeric 有一段奇怪的历史,可以追溯到 2000 年代初。它从来没有真正在功能上等同于 NumPy(甚至是数字,这正是它实际上试图模拟的),虽然它对于我们使用它的用途来说“足够好”,但可以将它用作Java 程序可能不是一个好主意。我们用 Python 从头开始​​重写我们的应用程序,这样我们就可以使用 NumPy 而不是尝试在 Java 中进行向量数学,这是一个糟糕的主意。出于这个原因,jnumeric 维护不足,可能应该默默地淡出不存在。

    我最近注意到 Github 上弹出了一个新项目,Numpy4J,它可能会有更光明的未来。

    虽然我知道它并不能完全解决您的问题,但我很好奇您为什么要迁移到 Jython 以获取科学代码。 Java 没有 Python 拥有的出色的数字运算和绘图库。像 Weka 这样的 ML 库在 scikit-learn 中有 Python 等价物。像 ImageJ 这样的成像东西在 scikit-image 中有一个等价物。统计包存在于 pandas 和 statsmodels 中。你对 Python 不屑一顾的科学之痒是什么?

    如果您想迁移到 Jython 以与无法轻松移植到 Python 的现有 Java 库进行交互,我会考虑使用 JPype 而不是 Jython。

    【讨论】:

    • 我需要尽可能快地对矩阵进行多次算术计算。首先,我知道由于 GIL 的限制,Python 中的多线程无法利用所有 CPU,并且多处理可能无法解决问题,因为我需要将极大的矩阵传递给每个进程,这可能会破坏并行化(我尝试了解决方法 - 尚未成功:stackoverflow.com/questions/18831525/…)。据我所知,Jython 没有这个问题。
    • 其次,出于效率原因,将代码的关键部分从 Jython 重构为 Jave 似乎很有希望。但是,我不确定 Java 执行矩阵计算的速度是否比 Numpy 快。
    • GIL 肯定是个问题,这是真的。这绝对取决于您的特定问题,但我不认为 Java/Jython 已证明自己是解决您所面临问题的好方法。在 Windows 上工作会使事情变得更加困难,但我认为你最好的选择是数字 Python compilers。或者,考虑为关键部分编写自己的多线程 C 代码(或参阅Cython)。
    猜你喜欢
    • 2016-06-07
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2013-10-04
    • 2019-04-08
    相关资源
    最近更新 更多