ジュリア:過去の状況を把握する


19

さまざまな種類の統計作業のためのR / Pythonの代替としてのジュリアについて非常に良い議論があった2012年の質問に出会いました。

これは、ジュリアの約束に関する2012年の最初の質問です。

残念ながら、ジュリアは当時非常に新しく、統計作業に必要なツールキットはやや原始的でした。バグは解決されていました。ディストリビューションのインストールは困難でした。など。

誰かがその質問に対して非常に適切なコメントを持っています:

これは、この質問に後から答えが出る可能性があるのは5年後だということです。現時点では、ジュリアには日常のユーザーのためにRと競合する可能性のある統計プログラミングシステムの次の重要な側面が欠けています。

それは2012年でした。2015年になり、3年が経ちましたが、ジュリアはどのように考えたのでしょうか。

言語自体およびJuliaエコシステム全体に関する豊富な経験がありますか?知りたいです。

具体的には:

  1. 統計ツールの新しいユーザーに、Rを介してJuliaを学習することを勧めますか?
  2. どのような統計のユースケースでジュリアを使用するように誰かにアドバイスしますか?
  3. 特定のタスクでRが遅い場合、ジュリアまたはPythonに切り替えるのは理にかなっていますか?

注:2015年6月14日に最初に投稿されました。


2
私は最近見て、彼らの統計パッケージの深さに感銘を受けました。誤解しない限り、Pythonも解釈されます。そのため、Rと同様の制限があります。Juliaの魅力は、速度の向上と並列化へのより良いアクセスが約束されたことでした。
DWin

3
ジュリアの問題は、SciPyが改善され続けていることだと思います。そして今、私たちはミックスにトーチを持っています。3番目(または4番目または5番目)の科学計算言語を学習したい人は誰もいません。
シャドウトーカー

4
ジュリアは適切に設計された素敵な言語ですが、私の意見では、到着は遅すぎました。単一ノードのマトリックス計算トレインは長い間過ぎました。Juliaは基本的にFortran 2.0であり、いくつかの優れた機能を備えていますが、クラウドコンピューティングへの移行が進むにつれて、Scala、Clojure、さらにはPythonなどの関数型言語を提供することはほとんどありません。ジュリアが10年前に現在の状態にあったなら、それは大成功だったかもしれません。
マーククレセン

2
PythonとRcppは本当にダイナミックに、ジュリアは...追いつくのは難しいことのようですので、Rゲインますます注目(Rコンソーシアム、マイクロソフトなど)開発している
ティム

1
ジュリアのビジネスケースは見ていませんが、まだ見ていません。プログラマーが既に存在するものを再構築しようとする冗長な試みのように思えた。
アクサカル

回答:


15

私はジュリアに切り替えましたが、私の実用的な理由は次のとおりです。

  • グルーコードは本当にうまくいきます。MATLABには多くのレガシーコードがあり、MATLAB.jlはインストールに5分かかり、完全に動作し、MATLAB関数を使用するのに自然な簡潔な構文を持っています。Juliaは、R、Python、C、Fortran、および他の多くの言語でも同じです。
  • ジュリアは並列処理を非常にうまく行っています。私は、マルチプロセッサ(共有メモリ)の並列処理だけでなく、マルチノードの並列処理についても話します。それぞれがかなり遅いため、あまり使用されないHPCノードにアクセスできるので、Juliaを試してみることにしました。ループに@parallelを追加し、マシンファイルを指定してループを開始し、5つのノードすべてを使用してbamを実行しました。R / Pythonで試してみてください。MPIでは、最初に試してみるのに数分ではなく、それが機能するまでに時間がかかります(そして、それはあなたが何をしているのかを知ることです)!
  • Juliaのベクトル化は高速で(多くの場合、他の高レベル言語よりも高速です)、ベクトル化されていないコードはほとんどCで高速です。したがって、科学的アルゴリズムを作成する場合、通常は最初にMATLABで作成し、次にCで再作成します。ジュリアは一度作成してから、コンパイラコードを与え、5分後に高速になります。たとえそうでなくても、これは自然に感じる方法でコードを書くだけで、うまく動作することを意味します。R / Pythonでは、適切なベクトル化バージョンを取得するのはかなり難しいと考える必要があります(後で理解するのは難しい場合があります)。
  • メタプログラミングは素晴らしいです。あなたが「言語で______できたらいいのに」と思った回数を考えてください。マクロを作成します。通常、誰かがすでに持っています。
  • すべてがGithubにあります。ソースコード。パッケージ。コードを非常に簡単に読み、開発者に問題を報告し、開発者と話をして何かの方法を見つけたり、パッケージを自分で改善することさえできます。
  • 彼らはいくつかの本当に良いライブラリを持っています。統計については、おそらく最適化パッケージに興味があるでしょう(JuliaOptはそれらを管理するグループです)。数値パッケージはすでに一流であり、改善しているだけです。

そうは言っても、私はまだRstudioが大好きですが、Atomの新しいJunoは本当に素晴らしいです。もはや重い開発ではなく、安定しているとき、プラグインの使いやすさのためにRstudioよりも優れていると見ることができます(例:hidpi画面に適応するための優れたプラグインがあります)。ですから、ジュリアは今学ぶのに良い言語だと思います。これまでのところ私にとってはうまくいった。YMMV。


3年以上が経過しているので、この回答を更新してもよろしいですか?
ベイエクイティスト

1
scicomp.stackexchange.com/questions/10922/…の更新された応答をここで提供しました。たぶんそれはコピーされるはずです。
クリスラッカッカス

11

「XよりYを学ぶ」は問題を定式化する正しい方法ではないと思います。実際、両方を(少なくとも基本的に)学び、手元の具体的なタスクに応じて適切なツールを決定できます。また、ジュリアは他の言語からその構文と概念のほとんどを継承しているため、それを理解するのは非常に簡単です(Pythonも同様ですが、Rについても同じことが言えるかもしれませんが)。

では、どの言語がどのタスクに適していますか?これらのツールの使用経験に基づいて、次のように評価します。

  • 以下のために純粋な統計的研究 REPLとスクリプトのカップルで行うことができ、Rは完璧な選択のようです。特に統計用に設計されており、ツールの歴史が最も長く、おそらく統計ライブラリの最大セットがあります。

  • 統計(または、たとえば機械学習)を生産システム統合したい場合、Pythonははるかに優れた代替手段のように見えます:汎用プログラミング言語として、すばらしいWebスタック、ほとんどすべてのAPIとライブラリへのバインディング、文字通り、ウェブの廃棄から3Dゲームの作成まで。

  • 高性能アルゴリズムJuliaで書くのがはるかに簡単です。SciKit LearnやC / C ++に支援されたe1071のような既存のライブラリのみを使用または結合する必要がある場合、PythonとRで十分です。しかし、高速バックエンド自体に関しては、ジュリアはリアルタイムの節約になります。 PythonまたはRであり、C / C ++の追加知識は必要ありません。例として、Mocha.jlは、もともとPythonのラッパーを使用してC ++で記述された、純粋なJulia深層学習フレームワークCaffeで再実装します。

  • また、一部のライブラリは一部の言語でのみ利用可能であることを忘れないでください。たとえば、Pythonのみがコンピュータービジョンの成熟したエコシステムを持ち、一部の形状マッチングおよび変換アルゴリズムはジュリアでのみ実装されており、Rの医学統計のユニークなパッケージを聞いたことがあります。


私は、ほとんどの人が1つを選択し、ほとんどそれを維持しようとするべきだと言うでしょう---少なくとも私にとっては、複数の言語を使用して、それらを混ぜてしまい、多くの時間をそのように
失い

1
高性能アルゴリズムを記述する際の逆説的な問題は、RやJuliaなどの高レベル言語で記述しやすい場合でも、実際に高性能アルゴリズムを記述するまでには、おそらくC ++のようなものを使うのが好きだということです。または多分それは私だけです。
クリフAB

3

(b)どのような種類の統計のユースケースで、ジュリアを

(c)Rが特定のタスクで遅い場合、ジュリアまたはPythonに切り替えるのは理にかなっていますか?

高次元で計算集約的な問題。

  • マルチプロセッシング。Juliaの単一ノードの並列機能(@spawnat)は、Pythonの機能よりもはるかに便利です。たとえば、Pythonでは、REPLでマップリデュースマルチプロセッシングプールを使用できず、並列化するすべての関数に大量の定型文が必要です。

  • クラスターコンピューティング。JuliaのClusterManagersパッケージを使用すると、複数のコアを持つ単一のマシンとほぼ同じように、計算クラスターを使用できます。[これをClusterUtilsでのスクリプト作成のように感じて遊んでいます]

  • 共有メモリ。JuliaのSharedArrayオブジェクトは、Pythonの同等の共有メモリオブジェクトよりも優れています。

  • 速度。私のJulia実装は、乱数生成および線形代数(マルチスレッドBLASをサポート)で、R実装より(単一マシン)高速です。
  • 相互運用性。JuliaのPyCallモジュールを使用すると、ラッパーなしでpythonエコシステムにアクセスできますpylab。たとえば、これを使用します。Rにも似たようなものがありますが、試したことはありません。ccallC / Fortranライブラリもあります。
  • GPU。JuliaのCUDAラッパーは、Pythonのラッパーよりもはるかに開発されています(チェックすると、Rはほとんど存在しませんでした)。pythonよりもJuliaで外部ライブラリを呼び出す方がはるかに簡単であるため、これは引き続き当てはまると思われます。

  • 生態系。Pkgモジュールは、バックエンドとしてgithubのを使用しています。これは、パッチを提供することや所有者が責任を引き継ぐことをはるかに簡単にするため、Juliaモジュールの長期的な保守性に大きな影響を与えると信じています。

  • σ

大きな問題に対して高速なコードを書くことは、ますます並列計算に依存するようになります。Pythonは本質的に並列非友好的(GIL)であり、Rのネイティブマルチプロセッシングは存在しません。ジュリアは、Python / R / Matlabの感触の多くを保持しながら、パフォーマンスコードを記述するためにCにドロップダウンする必要はありません。

python / Rから来るJuliaの主な欠点は、コア機能以外のドキュメントがないことです。pythonは非常に成熟しており、ドキュメントにないものは通常stackoverflowにあります。Rのドキュメンテーションシステムは、比較するとかなり優れています。

(a)統計ツールの新しいユーザーに、RでJuliaを学ぶことを勧めますか?

はい、ユースケースをパート(b)に適合させる場合。ユースケースに多くの異種作業が含まれる場合

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