科学計算に最適な言語[終了]


10

ほとんどの言語では、いくつかの科学計算ライブラリが利用できるようです。

  • Pythonは Scipy
  • Rust 持っている SciRust
  • C++持っているなど、いくつかのViennaCLArmadillo
  • Java持っているJava NumericsColtだけでなく、他のいくつかの

以下のような言語は言うまでもありませんRし、Julia科学技術計算のために明示的に設計されています。

非常に多くのオプションを使用して、タスクに最適な言語をどのように選択しますか?さらに、どの言語が最もパフォーマンスが高くなりますか?PythonそしてR宇宙の中で最も牽引力を持っているように見えるが、それは、より良い選択となるように、論理的にコンパイルされた言語がそうです。そして、これまでに何よりも優れているFortranでしょうか?さらに、コンパイルされた言語はGPUアクセラレーションを備えている傾向がありますが、インタープリター言語はそうではRありPythonません。言語を選択するときは何を考慮すればよいですか。また、ユーティリティとパフォーマンスのバランスが最も良い言語はどれですか。また、私が見逃した重要な科学計算リソースを持つ言語はありますか?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
ここに質問はありません。プログラミング言語に関する基本的な調査を行う必要がある場合は、誰かがここにポップアップして趣味の馬を押すのを待つよりも、ウィキペディアを読む方が得策です。
Dirk Eddelbuettel 2014年

@DirkEddelbuettel非常に良い点。ベータ版のこの時点でコンテンツを洗練するよりもコンテンツを制作する方がいいと思いましたが、SEベータ版についてはあまり知りません。それは私の側で良い動きでしたか?
インディコ2014年

1
これらの数字を見てください。
Emre

@DirkEddelbuettel間違いではありませんが、私の希望は、さまざまな言語に関連する有用な特性とツールについての議論を促進することでした。使用する言語はデータサイエンスの重要なツールであるため、同様の作業を試みたい人のためのリソースとして、人々が好むツールや客観的なメリットについてここで議論できると私は考えていました。
ragingSloth 2014年

1
@indico cran.r-project.org/web/packages/overlap/index.htmlを試してみてくださいこれは偶然ランダムに選んだ最初のものです。しかし、実際、私はRパッケージを書いた多くの統計学者を個人的に知っています。まだPythonを書いた人はいません。会話を少し広げるには、kdnuggets.com / 2013/08 /…が興味深いです。
レンビック2014年

回答:


12

これはかなり大規模な質問であるため、これは完全な回答を意図したものではありませんが、データサイエンスに関しては、ジョブに最適なツールを決定することに関する一般的な実践に役立つことを願っています。一般的に、この分野のツールに関しては、私が探している資格の比較的短いリストがあります。特定の順序ではありません:

  • パフォーマンス:基本的に、言語が行列乗算を実行する速度に要約されます。これは、多かれ少なかれデータサイエンスで最も重要なタスクであるためです。
  • スケーラビリティ:少なくとも個人的には、これは分散システムを簡単に構築できることに帰着します。これはどこかのような言語がJulia本当に輝く場所です。
  • コミュニティ:どの言語でも、実際に使用しているツールを使用できなくなった場合に役立つアクティブなコミュニティを探しています。これは、python他のほとんどの言語よりもはるかに優れています。
  • 柔軟性:使用する言語によって制限されることほど悪いことはありません。それはそれほど頻繁には起こりませんが、グラフ構造をで表現しようとすることhaskellは悪名高い苦痛でありJulia、そのような若い言語であるために多くのコードアーキテクチャの苦痛で満たされています。
  • 使いやすさ:大規模な環境で何かを使用したい場合は、セットアップが簡単で、自動化できることを確認する必要があります。半ダースのマシンでフィニッキーなビルドをセットアップする必要があることほど悪いことはありません。

パフォーマンスとスケーラビリティについては数多くの記事がありますが、一般的には、特定のアプリケーションによっては重要ではない場合もあるが、言語間で5〜10倍のパフォーマンスの違いを見ることになります。GPUアクセラレーションに関する限り、はGPUアクセラレーションをで動作させるcudamatための非常にシームレスな方法でpythonあり、cudaライブラリは一般的に、GPUアクセラレーションを以前よりもはるかにアクセスしやすくしています。

コミュニティと柔軟性の両方に使用する2つの主要なメトリックは、言語のパッケージマネージャーと、SOなどのサイトでの言語の質問を調べることです。質の高い質問と回答が多数ある場合は、コミュニティが活発であることを示しています。パッケージの数とそれらのパッケージの一般的なアクティビティも、このメトリックの適切なプロキシになります。

使いやすさに関する限り、私は実際に知る唯一の方法は実際に自分で設定することだと確信しています。多くのデータサイエンスツール、特にデータベースや分散コンピューティングアーキテクチャの周りには迷信がたくさんありますが、自分で構築するだけでセットアップやデプロイが簡単か難しいかを実際に知る方法はありません。


スケーラビリティの面で、この答えに追加するScalaGo言及する価値があります。
Marc Claesen、

明快さと簡潔さを追加します(構文と言語アーキテクチャに関連するだけでなく)。高速な書き込みと苦痛なしの読み取りが可能であることは大きな違いを生みます(プログラマーの時間はマシンの時間よりも高価であるため)。
Piotr Migdal 2014年

5

最適な言語は、何をしたいかによって異なります。最初の発言:自分を1つの言語に限定しないでください。新しい言語を学ぶことは常に良いことですが、ある時点で選択する必要があります。言語自体が提供する機能は考慮に入れるべき明白なものです、私の意見では、次のことがより重要です。

  • 利用可能なライブラリ:すべてを最初から実装する必要がありますか、それとも既存のものを再利用できますか?このライブラリは、簡単にインターフェースできる限り、検討している言語である必要はありません。ライブラリにアクセスできない言語で作業しても、物事を成し遂げるのに役立ちません。
  • エキスパートの数:外部の開発者が必要な場合、またはチームで作業を開始する場合は、実際に言語を知っている人の数を考慮する必要があります。極端な例として:もしあなたがたまたまそれが好きだからBrainfuckで働くことに決めたなら、あなたは一人で働く可能性が高いことを知っている。SOの言語ごとの質問の数など、言語の人気を評価するのに役立つ多くの調査が存在します。
  • ツールチェーン優れたデバッガー、プロファイラー、ドキュメントツール、および(それに興味がある場合は)IDEにアクセスできますか?

私の指摘のほとんどは確立された言語を支持していることを認識しています。これは、「やりたいこと」の観点からです。

とはいえ、私は個人的には、低水準言語と高水準言語に習熟する方がはるかに良いと信じています。

  • 低レベル:C ++、C、Fortran、... これらの言語での開発は通常遅いため、必要な場合にのみ特定のプロファイリングホットスポットを実装できます(これは議論の対象ですが)。これらの言語は、重要なパフォーマンスの点では依然として丘の王であり、長い間トップにとどまる可能性があります。
  • 高レベル:Python、R、Clojureなど...もの同士を「接着」し、パフォーマンスが重要でないもの(前処理、データ処理など)を実行します。これらの言語で迅速な開発とプロトタイピングを行う方がはるかに簡単なので、これが重要であると私は思います。

4

まず、何をしたいかを決め、次にそのタスクに適したツールを探す必要があります。

非常に一般的なアプローチは、最初のバージョンにRを使用し、アプローチが正しいかどうかを確認することです。少し速度が落ちますが、非常に強力なコマンドとアドオンライブラリがあり、ほとんど何でも試すことができます。http//www.r-project.org/

2番目のアイデアは、ライブラリの背後にあるアルゴリズムを理解したい場合は、数値レシピを調べてみることです。さまざまな言語で利用でき、無料で学習できます。これらを商用製品で使用する場合は、ライセンスを購入する必要があります:http : //en.wikipedia.org/wiki/Numerical_Recipes

ほとんどの場合、パフォーマンスは問題ではありませんが、適切なアルゴリズムとパラメーターを見つけるので、2つの数値を計算して出力する前に最初に10分間コンパイルする必要があるモンスタープログラムではなく、高速スクリプト言語を使用することが重要です結果。

また、Rを使用する上での大きなプラスは、データを視覚化するために必要なほぼすべての種類のダイアグラムに対応する組み込み関数またはライブラリを備えていることです。

その後、機能するバージョンがあれば、パフォーマンスが高いと思われる他の言語に移植することはほぼ簡単です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.