【问题标题】:Java or Python for math? [closed]用于数学的 Java 或 Python? [关闭]
【发布时间】:2011-06-13 04:03:01
【问题描述】:

我正在尝试编写一个非常繁重的基于数学的项目,它每天会解析大约 100MB+ 的数据多次,因此,我需要一种非常易于使用的快速语言。我会选择 C,但是,用 C 完成一个大型项目非常困难,尤其是在低级编程阻碍你的情况下。所以,我是关于 python 或 java 的。两者都配备了面向对象的功能,所以我不介意。现在,这是我选择 python 的优点:

  • 非常易于使用的语言
  • 拥有相当大的有用资料库
  • 有一个易于使用的绘图库

以下是缺点:

  • 不完全是炽热
  • 没有处于活动状态的本机 Python 神经网络库
  • 我无法关闭我的代码而不经历相当多的麻烦
  • 在客户端计算机上部署 python 代码很难处理,尤其是当客户端是白痴时。

以下是选择 Java 的优点:

  • 巨大的图书馆
  • 很好的支持
  • 易于部署
  • 相当快,甚至可以与 C++ 媲美
  • Encog 神经网络库非常活跃,非常棒
  • 网络支持真的很好
  • 强类型

以下是 Java 的缺点:

  • 我找不到像 matplotlib for python 这样好的图形库
  • 没有对大整数的内置支持,这意味着另一个依赖项(我的意思是真正的大整数,而不仅仅是 math.BigInteger 大小)
  • 与 Python 相比,文件 IO 有点尴尬
  • python 没有大量的数组操作或“简化编程”类型的功能。

所以,我希望你们能告诉我要使用什么。我同样熟悉这两种语言。此外,其他语言的建议也很棒。

编辑:哇!你们很快! 30 分钟,10 条回复!

【问题讨论】:

  • “真正的大整数”是什么意思? java.math.BigInteger 将增长到存储您正在处理的数字所需的任何大小(虽然因为 Java 没有运算符重载,但代价是语法有些尴尬)
  • 您是否考虑过使用“真实的”computer algebra system?它不一定是 Mathematica(昂贵!),有很多更便宜的,甚至是免费的选择。
  • 只是想知道“我的意思是真正的大整数,而不仅仅是 math.BigInteger 大小”的评论。为什么你认为 java.math.BigInteger numbers 不会这样做?在我看来,在你开始达到极限之前,你的记忆力就已经出现了问题。
  • 创建一个可执行文件 + 所需的库是小菜一碟,例如cx_冻结。结果无法破译,除非有熟练的人真的愿意这样做(在这种情况下,无论如何你都被搞砸了,几乎不管语言如何)——更不用说通常反对“我想隐藏我的来源”了。
  • 你应该列出你的优先事项:关闭源代码是必须的吗?你有多少时间?顺便说一句:Python IS 是强类型的,但不是静态的。

标签: java python math stocks


【解决方案1】:

Java 通常会更快地运行(不要认为这是绝对事实),但编写起来会更慢。

Python 正好相反。由于 SciPy 和 NumPy 等库已经存在,它们是基于快速 C 代码构建的,如果您更喜欢在代码编写方面采用“更快”的方式,我建议您使用 Python。除非 SciPy + NumPy 中缺少应用程序的基本块,而 Java 存在这些块。

【讨论】:

  • NumPy 似乎是个好主意,我会研究一下。
  • 对于那些不是 SciPy 和 NumPy 内置的函数,您可以使用 weave(SciPy 的一部分)或 Cython 来加速它们。
  • NumPy 和 SciPy 正在迅速成为科学/数学计算领域的标准。绝对值得拥有的技能。
  • @darioo:请告诉我,应用程序的基本块是什么?
  • @user514892:任何作为标准库或现成的第三方库存在的东西。
【解决方案2】:

为什么不通过在 JVM 上利用多种语言来两全其美:

  • 用 Java 编写性能密集型部分(或使用现有的优秀 Java 库)
  • 使用Jython用Python编写用户界面/应用程序,并在需要时调用Java代码

【讨论】:

  • 只是 Jython 的一个陷阱。从 Jython 调用 Java 类既好又简单,但实际上是一个真正的 PITA。
  • Jython 会胜过使用 Java 的要点,因为这主要是因为速度的提高。
  • 恕我直言,这是明确的答案,我不会再看下去了。
  • 我不太明白你的意思,Dhaivat。你能改写吗?据我所知,Jython 的速度确实可以与 JVM 上的本机 Java 代码相媲美,对吧?
【解决方案3】:

NumPy 通常会在 Python 的计算能力上发挥相当大的作用。它是 Python 中任何实数运算的事实标准。我在这个领域没有任何真正的Java经验,所以我没有资格为你回答这个问题。

【讨论】:

    【解决方案4】:

    在客户端计算机上部署 python 代码很难处理,尤其是当客户端是白痴时我认为这也是 Java 的问题。

    我找不到像 matplotlib for python 这样好的图形库 你试过 JFreechart http://www.jfree.org/jfreechart/

    另外,对其他语言的建议也很棒我会推荐 Groovy,它看起来有点像 Python,是一种与 Java 很好集成的 JVM 语言。

    您并没有直接问这个问题,但我会向您推荐用于 Math Java 计算的 Apache Commons Math 库。

    【讨论】:

    • 这看起来是个好主意,正是我需要的......
    • Groovy 看起来有点像 Python。是的,它是动态类型的并支持列表,但它的语法(对我来说)看起来 > 90% 像 Java。
    • 每个人都有权发表意见。
    【解决方案5】:

    如果这些是选择,那么对于数学密集型工作,Java 应该更快。它已编译(虽然是的,它仍在运行字节码)。

    Exelian 提到了 NumPy。还有 SciPy 包。两者都值得一看,但似乎只有在处理大量数组和矢量处理时才能真正提高速度。 当我尝试将这些与 NLTK 一起用于数学密集型例程时,我发现没有那么大的加速。

    如今,对于数学密集型工作,我会使用 C/C++ 或 C#(我个人更喜欢 C# 而不是 Java,尽管这不会影响您的决定)。我的第一个雇主出大学。付钱让我使用 Fortran 来处理几乎可以肯定比你想的任何东西都更加数学密集的东西。别笑 - Fortran 编译器是在重铁上进行数学处理的最佳编译器。

    【讨论】:

    • 为什么会有人嘲笑 Fortran?它仍然是严肃科学计算的通用语。 NIST 线性代数库无可匹敌。
    • 相当,编译器和库的组合可能是你能得到的最好的重铁,但是大多数开发人员(甚至是老开发人员)似乎并没有意识到这一点,并迅速将其排除在外手是古代的东西,与现代世界无关。
    【解决方案6】:

    什么对你来说更重要?

    如果是快速应用程序开发,我发现 Python 比 Java 更容易编写代码 - 我刚刚学习 Python,而我已经使用 Java 编写代码多年了。

    如果是应用程序速度和重用现有代码的能力,那么您可能应该坚持使用 Java。它的速度相当快,目前许多研究工作都使用 Java 作为他们选择的语言。

    【讨论】:

      【解决方案7】:

      看来 Java 可以真的快:http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
      另一方面,Python 非常适合做数学运算,如果正确使用它(我的意思是,使用正确的成语/模块/内置函数),性能还有很大的提升空间。

      编辑:对其他语言的建议:Haskell。这是非常高的水平;以“低级风格”编写它可以非常快(可以与 C 相当公平地比较),如果您可以利用它的多线程功能,它会更好。然而,经验告诉我们,在项目中需要新工具时,学习使用新工具永远不是一件好事。

      【讨论】:

      【解决方案8】:

      Apache Commons Math 在 JAMA 停止的地方继续学习。他们非常有能力进行科学计算。

      Python 也是如此——NumPy 和 SciPy 非常出色。我也喜欢 Python 是面向对象和函数式编程的混合体这一事实。函数式编程对于数值方法非常方便。

      我建议使用你最了解的那个,但如果选择是一个折腾我可能会倾向于 Python。

      【讨论】:

        猜你喜欢
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2022-12-24
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        相关资源
        最近更新 更多