web-dev-qa-db-ja.com

Pythonが高性能/科学計算に使用されているのはなぜですか(Rubyは使用されていません)?

PyCon 2011の講演からの引用 があります:

少なくとも当店(アルゴンヌ国立研究所)には、科学計算用の3つの承認済み言語があります。この順序では、C/C++、すべての方言のFortran、Pythonです。 Ruby、Perl、Javaの絶対的かつ完全な欠如に気づくでしょう。

これは、ハイパフォーマンスコンピューティングのより一般的なコンテキストでした。引用は1つのショップのみからのものですが、別の HPCの言語についての質問 もPythonを1つとして(Rubyではなく)学ぶために)リストしています。

これで、問題空間で使用されているC/C++とFortran(およびPerl/Javaが使用されていないが使用されている)を理解できます。しかし、PythonとRuby use for HPC)はかなり似ているため、大きな違いがあることに驚いています(注-私はm Pythonのファンですが、Rubyに対してagainstはありません。

1つの言語が採用された理由固有はありますか?利用可能なライブラリについてですか?特定の言語機能はありますか?地域社会・共同体?あるいは、たぶん historical contigency で、それが逆になっていたのではないでしょうか?

107
Cyclops

コメントを詳しく説明します。

科学計算でのPythonの使用に影響を与えた要因はいくつかあると思いますが、「はい、それがPythonはRuby /その他で使用されます "

初期の歴史

PythonとRubyはほぼ同じ年齢です-Wikipediaによると、Pythonは1991年に正式にリリースされ、1995年にはRubyが正式にリリースされました。

ただし、GoogleはPythonをすでに使用しており、Rubyの開発者を探していたため、Pythonよりも早くPythonが登場しました。ミレニアム。プログラミング言語の使用とそれらを使用する人々への影響の厳選された歴史があるわけではないので、GoogleによるPythonのこの早期の採用は、それ以上に拡大したい人々にとって大きな動機であったと理論づけますMatlab、C++、Fortran、Stata、Mathematicaなどを使用するだけです。

つまり、Googleは何千ものマシン(並列化とスケーリングを考える)を持ち、常に何百万ものデータポイント(ここでもスケール)を処理するシステムでPythonを使用していたことを意味します。

イベント合流

科学計算は、SGIやCraysなどの特殊なマシンで行われていました(覚えていますか?)。もちろん、FORTRANは、比較的単純で、最適化が容易なため、広く使用されています(現在も使用されています)。

過去10年ほどの間に、一般的なハードウェア(億万長者にならなくてもあなたや私が購入できるものを意味します)が科学的で大規模なコンピューティングの領域に引き継がれました。 現在の上位500のランキング をご覧ください。世界で上位にランク付けされている「スーパーコンピュータ」の多くは、通常のIntel/AMDハードウェアで構築されています。

GoogleがPythonを宣伝していて、Googleが汎用ハードウェアを使用していて、何千ものマシンがあったため、Pythonは良いタイミングで登場しました。

さらに、いくつかの古い科学計算の記事を掘り下げると、それらは2000年頃に浮上し始めました。

以前のサポート

2000年に書かれた天文データ解析ソフトウェアおよびシステム用の記事 は、科学計算用の言語としてPythonを示唆しています。

この記事にはPythonに関する次の引用があります。

Pythonは解釈されたオブジェクト指向プログラミング言語であり、科学アプリケーションでかなりの注目を集め始めています(Python、1999)。これは、Pythonおよび一般的なスクリプト言語が、多くの科学プロジェクトの次の論理的なステップを表すためです(Dubois 1994)。まず、Pythonは、科学プログラムですでに使用されている単純なコマンド言語の拡張機能と見なすことができるインタープリター型プログラミング言語を提供します

次に、Pythonは他の言語で書かれたソフトウェアと簡単に統合できます。その結果、既存のプログラムを駆動するための制御言語としても、異なるシステムを組み合わせるためのグルー言語としても機能します。最後に、Pythonは、サードパーティモジュールの大規模なコレクション、確立されたユーザーベース、および書籍やオンラインリファレンスの形式でのさまざまなドキュメントを提供します。このため、科学者が独自のコマンドインタープリターを作成するときにしばしば達成しようとすることの高度に洗練され拡張されたバージョンと見なす場合があります。

そのため、Pythonは、機能的に当時の既存のシステムと同様であり、統合が容易であったため、90年代後半までさかのぼってすでに牽引力があったことがわかりますPython Cや既存のプログラムなど。記事の内容に基づいて、Pythonは1995年から1996年までさかのぼってすでに科学的に使用されていました。

人気成長の違い

Rubyの人気は、2004年に最初にリリースされたRuby on Railsの台頭とともに爆発しました。私がRubyについての話題を初めて聞いたのは大学時代で、それは2005年から2006年頃でした。 Django for Pythonは同じ時期にリリースされました(Wikiによると2005年7月)が、Rubyコミュニティの焦点は、その促進に非常に集中しているようでしたWebアプリケーションでの使用。

一方、Pythonにはすでに科学計算に適合するライブラリがありました。

  • NumPy -NumPyは2005年に正式に開始されましたが、その上に構築された2つのライブラリ、Numeric(1995)とNumarray(2001?)は以前にリリースされました。

  • BioPython -少なくとも2001年に遡るPython用の生物学的計算ライブラリ

  • [〜#〜] sage [〜#〜] -2005年の初めに最初のパブリックリリースが行われたMathパッケージ

さらに、(ダウンロードサイトを閲覧するだけでなく)彼らのタイムラインの多くは知りませんが、PythonにはSciPy(2006年にリリースされたNumPyで構築)もあり、Rとのバインディングがありました(統計言語)2000年代初頭に、MatPlotLibを取得し、ipythonで非常に強力なシェル環境を取得しました。

ipython は2000年代初頭に最初にリリースされ、統合されたmatplotlibグラフや 計算クラスタを管理できること

上記の記事から:

また、他のいくつかのPython関連の科学計算プロジェクトに注目する価値もあります。数値Python拡張機能は、Python(Dubois 1996)に配列と行列の高速操作を追加します。MMTKは分子モデリング用のPythonベースのツールキット(Hinsen 1999)であり、BiopythonプロジェクトはPythonを開発しています-生命科学研究用のベースのツール(Biopython 1999)、およびVisualization Toolkit(VTK)は、Pythonバインディングを備えた高度な視覚化パッケージです(VTK、1999)。さらに、Pythonコミュニティで進行中のプロジェクトは、画像処理とプロットのための拡張機能を開発しています。最後に、(Greenfield、2000)で発表された研究は、STScIでのプロジェクトでのPythonの使用について説明しています。

良い Python用の科学的および数値的パッケージのリスト


したがって、その多くはおそらく初期の歴史と2000年代までのRubyの相対的な曖昧さによるものですが、PythonはGoogleの伝道のおかげで勢力を得ていました。

では、1995年から2000年の期間にスクリプト言語を評価していたとしたら、実際に何を見ていましたか。人々がそれを使いたくないほど構文的にはおそらく異なるPerlがあり、それから構文がより明確で読みやすかったPythonがありました。

そして、はい、おそらく多くの自己強化があります-Pythonにはすでに科学計算のためのこれらの便利なライブラリがすべてありますが、Rubyは科学での使用を支持する少数派の声を持っています、 SciRuby のようないくつかのライブラリが出現していますが、Pythonのツールはこの10年で成熟しています。

Rubyのコミュニティー全体では、Rubyがウェブ言語として普及することに非常に強い関心を持っているようです。これは、Rubyが広く知られるようになったためです。Pythonは、別の方法で始まりました。その後、Web言語として広く使用されるようになりました。

108
wkl

エンジニアリングアプリケーションではPythonを、ウェブアプリケーションではRubyを使用しています。

科学言語としてRubyで見られる問題は、特定の操作に対して構文オプションが多すぎることです。

Pythonは、「それを行うには明らかな方法が1つ、できれば1つだけあるべき」という前提で設計されています。これにより、誰かのコードを読んでその意図を判断するのが非常に簡単になります。これは、エンジニアリングなどのピアレビューにとって重要です。

私はRubyが好きで、特定のタスクに最適ですが、私のRubyコードは、まったく同じことを行う別のプログラマーのコードとは構文的に完全に異なる場合があります。これにより、科学的環境やエンジニア環境で曖昧さが多すぎます。

37
Joshua Shreve

推測では、それの大部分は多くの研究者による matlab への依存であろう。 Pythonには sage などの代替手段があります。一方、Rubyにはないか、少なくとも明らかなものはありません。

次に、 Ruby FAQ によると、pythonは手続き型とオブジェクト指向の両方ですが、Ruby手続き言語としてのマスカレード。MATLABで行うような数学の目的で小さなスクリプトを書いている場合、OO paradigm is頭痛。それだけでなく、それは研究者が使用する機能的/手続き的パラダイムから概念的なジャンプを強制します。数学はそうではありませんOO。数学は機能的です、その後に手続き型(論理証明を考える)が続きます。

最後に、Ruby FAQは、Rubyはpythonよりも複雑であることを示しています。プログラミングは、研究者に次ぐものであり、まず私たちのように。

17
Spencer Rathbun

BDFL(Guido van Rossum)が最初にPython)と書いたときの目標は、一般的なコーディングエラーを排除するプレーンな英語(DARPA資金提供の提案)と同じくらい理解しやすいことでした。

非常に目立つ問題の1つは、ブロックを区切るインデントの使用です。明示的な複雑なステートメント区切り文字がある言語(C波括弧、Pascal BEGIN/ENDなど)では、コードを字句解析プログラムに渡す前に、空白が1つのスペース文字に折りたたまれます。これにより、コードのレイアウト方法に大きなバリエーションが生まれます。

プロのプログラマーにとっては、週30時間以上の練習で対処できるようにトレーニングを受けているため、これは問題になりません。

プログラミングがツールである他の専門家にとって、この問題は大きな問題になります。このグループには、数学者、物理学者、化学者、エンジニアなどが含まれます。

Pythonは、非専門家プログラマーのエラーを減らすので、彼らが解決しようとしている問題について考えることができ、言語の仕組みにそれほど対処する必要はありません。

これは、プログラミングの専門家以外で人気がある理由の1つの例です。含まれている電池などの同じポイントを説明するために使用できる他の例があります。Zenof Python(import this)、Montyの使用Pythonユーモアなど。

14
Lance Helsten

これは素晴らしいディスカッションです。ここの投稿は科学コミュニティでpythonがより人気がある理由を本当に答えたと思います。ただし、Ruby sciencesにはいくつかの反論があります。

  • Rubyはpython(DSLなど)よりも直感的にコーディングできます。適切なパッケージが使用されている場合:

    check bioruby: http://bioruby.org/ シーケンスリザーブは単純にできます:s.reverseなど。データベースを使用する場合:RubyデータベースバインディングAPIは、おそらくpythonよりも優れています。 。

  • Rubyは簡潔であると同時に、より高いレベルの抽象化を可能にします。

  • 優れたパッケージ管理システム:Ruby gemは、setuptools、pipなどと比較して非常に簡単です。

ただし、Rubyの採用は、その複雑さによって妨げられていました。 LISPは素晴らしい/強力な言語だと思っていますが、なぜ一般的な言語として普及しなかったのですか?同様の状況がRubyでもここにあります-それはLISP、スモールトーク、Perlから多くの力を継承します!しかし、利益を得るために実際にそれを使用するのは、選ばれた人々だけです。結局、それは特定のニッチ/特別な領域(Webのレール、設定の人形など)で強いままであるかもしれません、「非」プログラマーがそれを完全に楽しむのは難しいですが、プログラマーの良い友達かもしれません(いくつかのコンピュータを見ました)科学者は言語を楽しんでいます: http://www.cleveralgorithms.com/nature-inspired/index.html

いくつかの最新の更新:pythonはすでに風景を引き継いでいるようです。最近のような本: http://www.Amazon.com/Python-Data-Analysis-Wes-McKinney/dp/144931979 と他の多くの本(データ分析、機械学習など)はすべて使用言語としてpythonで記述されています。 Rubyが追いついたければ、いくつかの真剣な努力が必要です。 Pythonのmatplotlibを考えると、現在の状態になるまでに数人年かかります。 Rubyに真剣な取り組みを行わない限り、今後2〜3年でpythonデータ分析/科学計算の段階に追いつくことができないでしょう。

5
Isaac Pei

しばらくデータ分析にpythonを使用した後(Ruby、lua、およびRを使用した経験から))、numpyパッケージ(および多くの関連する科学ライブラリ)により、高速実行が可能になりますPythonでのプログラミングが容易な計算(numpyはCコードで記述/統合されているため、Cと同様の速度)。

Numpyは以前から存在していましたが、入手可能になったことで、scipy、pandas ...などなど、他の多くの関連する科学的パッケージを構築するのに役立ちました。優れたツールでpython科学計算のための優れたエコシステムですが、Rubyでは、同様の高速行列計算ライブラリが開発中です(NMtrix: https://github.com/SciRuby/nmatrix )。この巨大なタイミング違いは、python科学計算の明らかな選択です。

3
Ipstone

私はこれと同じことを考えていました。 Spencer Rathbunが言ったように、Pythonの手続き的な側面のためだと思います。私は「プログラマーではない」ので、RubyおよびRailsフレームワークは使いやすさの点で優れています。 、科学的な目的(数学、生物学など)でコーディングする場合、通常は「数学」言語で考える、つまり、次のような文については気にしません

Person.find_by_name 'Juanito'

しかしあなたはもっと気にします

A = B*C + D

したがって、Rubyは強力であり、その機能の多くが科学的なプログラムでは使用されないことになると思います。手順で考えるだけの方が簡単です。

2
juandiego

Pythonがデータサイエンスで非常に人気になった主な理由の1つは、スクリプトを実際のソリューションに拡張するために節約できる時間/労力(つまり、お金)が原因でした) 、ソフトウェアシステム)。Pythonを使用すると、データサイエンス用に作成したコードに基づいてシステムソリューションをより簡単に構築できます。

15年ほど前に、この機能を備えた通訳言語を検索した経験があります。当時、Pythonが選ばれたのは、それがデータサイエンスに最適な言語だからではなく、まれなOOP/portableインタプリタは、C/C++/Javaなどの他の言語とのインターフェースにも拡張可能です。現在とは異なり、これらは、データサイエンス用にすでに実装されているベースコードから直接ソリューションを構築するための優れた機能ですが、まれです。

時間は、データサイエンス言語を作成するためのもう1つの重要な要素です。 15年前に、Pythonの数値計算用の数値やscipyなどの基本的なパッケージがすでに存在することを発見しましたが、プログラミング言語としてRubyが存在することさえ知りませんでした。2018年後半、Rubyをデータサイエンスに使用しているプロジェクトをいくつか見つけることができました。多分10年後、RubyがAIで非常に人気がある理由を尋ねる人がいるかもしれません。

0
Tae-Sung Shin

1つの理由は、PythonはC/C++コードの使用/統合/呼び出しを適切にサポートしているが、私の知る限りではRubyは(統合の容易さ。これは、C/C++で高性能なコードコンポーネントを記述し、Python(つまり、高水準/目に優しい言語)を使用できることを意味します)全体を接着することこれは、Googleが早期に組織で採用した理由の1つでもあると思います。

0

PythonはNumpyパッケージでN次元配列をよりよくサポートしています。 Rubyに似たものは見たことがありません。

私が行った数値計算/科学計算ではPythonの方が速いようです。 PythonとRubyで同様のアルゴリズムを作成したとき以外は、証明がありません。Pythonアルゴリズムはより高速に実行されました(YMMV)。

0
Josh Petitt