21

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

  • 非常容易使用的语言
  • 有一个相当大的有用东西库
  • 有一个易于使用的绘图库

以下是缺点:

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

以下是选择 Java 的优点:

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

以下是 Java 的缺点:

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

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

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

4

8 回答 8

19

Java 通常运行得更快(不要把这当作绝对真理),但编写起来更慢。

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

于 2011-01-21T13:56:58.580 回答
12

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

  • 用 Java 编写性能密集型部分(或使用现有的优秀 Java 库)
  • 使用Jython在 Python 中编写用户界面/应用程序,并在需要时调用 Java 代码
于 2011-01-21T13:57:36.513 回答
4

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

于 2011-01-21T13:51:08.557 回答
4

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

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

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

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

于 2011-01-21T13:58:59.243 回答
1

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

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

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

于 2011-01-21T13:57:36.100 回答
0

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

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

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

于 2011-01-22T02:07:17.657 回答
0

It seems Java can be really fast: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
On the other hand Python is very good for doing math, and there's quite a lot of room for performance improvement if you use it correctly (I mean, with the right idioms/modules/builtin functions).

Edit: Suggestions for other languages: Haskell. It's very high level; writing it in "low level style" it can be very fast (can compare quite fairly with C) and its even better if you can make some use of its multithreading capabilities. However experience tells its never good learning to use new tools while they're needed in a project.

于 2011-01-21T14:01:52.807 回答
0

什么对你来说更重要?

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

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

于 2011-01-21T13:53:18.247 回答