StatsFragments

Python, R, Rust, 統計, 機械学習とか

Python 次世代の多次元配列パッケージ群

このところ、たびたび NumPy 後継が...とか 並列処理が...という話を聞くので、この秋 注目の多次元配列パッケージをまとめたい。

バックエンド系

NumPy のように数値計算処理を自前で実装しているパッケージ。

DyND

Blaze プロジェクトのひとつ。C++ 実装 + Python バインディングGitHub にいくつか Example があがっているが、複合型やカテゴリカル型、GroupBy 操作がサポートされていて熱い。ラベルデータも NumPy より簡単に実装できそうだ。

speakerdeck.com

並列分散系

自身では直接 数値計算処理を行わず、バックエンド ( 主に NumPy )を利用して並列/分散処理を行うパッケージ。1 物理PC/複数コアでの並列計算を主用途とし、NumPy, pandas では少し苦しいが PySpark などを使うほどじゃない...という場合に利用するもの。

Dask

Blaze プロジェクトのひとつ。Pure-Python 実装。主用途は単一物理PCでの複数コア計算だが、複数PCに処理を分散させることもできる。

NumPyAPI で並列計算を行う dask.array のほか、toolz 相当の操作を行う dask.bagpandas 相当の処理を行う dask.dataframe など一連のデータ構造が揃っている。

開発者はベースパッケージである NumPytoolzpandas のコミッタとの兼任が多い。自分もコミット権限をいただいており、dask.dataframe への API 追加を行なっている。

speakerdeck.com

DistArray

NumPyAPI で並列計算を行う DistArray のみをサポート、ほかのデータ構造はない。Pure-Python 実装。見た感じ、並列処理の基本的な考え方は Dask と同じようだ。Enthought が好きな方はこちらを使えばよいかと。

docs.enthought.com

bolt

NumPyAPI でローカル計算/分散処理を行う。Pure-Python実装。ローカル計算は NumPy をそのまま使い (並列処理しない)、分散処理は Spark で行う。海外の方が期待の新星っぽい扱いをしていたので気になったのだが、現時点で実装されている API は多くはない。

ほかにもいくつかプロジェクトがあるが、自分としては Dask を流行らせたいので、その記事を書きます。

9/24 追記 書きました。

sinhrks.hatenablog.com