C#で使えるNumPyライクな数値計算ライブラリ『NumSharp』

C#で書かれたNumPy風の数値計算ライブラリ。Apache License 2.0だそうです。

NumSharp



NumSharpは.NET StandardをターゲットとしたNumPyのC#ポートです。NumSharpはC#で科学計算を行う際に必要なとなる基本的なパッケージを提供します。

Pythonで書かれた機械学習コードをC#に書き直すのは大変ですよね? その理由は、Pythonで使われている関数に対応する機能を.NET SDKでほとんど見つけられないためです。

NumSharpはNumPyのC#版で、関数名やパラメータの配置などのプログラミングインターフェイスをできる限りNumPyに似せています。NumSharpを導入すれば、PythonコードからC#コードへの書き換えが簡単に行えます。

以下はNumSharpとNumPyの比較です。(左:Python, 右:C#):

NumSharp

より詳しい情報はこちらのドキュメントをご覧ください。
https://scisharp.github.io/NumSharp/

NumSharpには、arange, array, max, min, reshape, normalize, uniqueインターフェースが実装されています。今後さらに多くのインターフェースが追加されていく予定です。
.NETで機械学習を始めるなら、NumSharpが最適なライブラリと言えるでしょう。

実装されているAPI

NumSharpは、NDArrayを高レベルで抽象化したNumPyクラスによって、PythonのNumPyと同じように使用できます。
プログラミング言語間の機能差によるAPIの違いを最小限に抑えることで、.NET開発者がPythonコードから.NETコードへシームレスに書き換えられるようになり、幅広いNumPyコードのリソースを活用できるようになります。


スポンサーリンク

NumSharpはNuGetでインストールできる。

まだバージョン1.0にもなっていないけど、開発のモチベーションが面白い。


スポンサーリンク


以前、書籍「ゼロから作るDeep Learning」の内容をUnity C#でやってみる、とか言って数値計算にMath.NET Numericsを使ってやろうとしたけど結局途中で挫折(笑)
書籍『ゼロから作るDeep Learning』で自分なりに学ぶ
もう1年以上前になりますが、書籍「イラストで学ぶ ディープラーニング」を購入して少しずつ読み進めていたのです。↓ところが、読み進めている途中で壁にぶち当たりました。この書籍、途中からどんどん数式率が上がって行き、あんまりイラストで教え...


このNumSharpを使えばもっと手軽にできそうだな。「ゼロから」というか実際には「NumPyで作るDeep Learning」の本だもんね。

NumSharpはもともとSciSharpという、Pythonの機械学習系ライブラリリソースをC# .NET環境でも使えるようにするプロジェクトの一部らしい。
https://medium.com/scisharp

NumSharpはC#で書かれたNumPy風インターフェイスのライブラリだけど、PythonのNumPyを.NETから呼べるようにバインドしたNumpy.NETというプロジェクトが存在する。

Numpy.NET

Numpy.NET

Numpy.NETとNumSharpの比較

観点 Numpy.NET NumSharp
依存関係 CPython / NumPy 特定OS向けのC++ DLL
完了状況 全てのNDarray関数が利用可能 よく使われる関数のサブセットが利用可能
開発スピード 自動でAPIを生成するため速い マンパワー不足のため遅い
正確性 Python版と同様の結果となる Python版と結果が微妙に異なる
実情 numpyの開発に追従しやすい マンパワー不足のため、おそらく後続になる
GPUサポート なし 演算にGPUバックエンドを利用可能
パフォーマンス NumPyからオーバーヘッドを除いたものと同様 未測定

PythonとC# .NETをつないでいる仕組みはPython for .NETというもの。
https://github.com/pythonnet/pythonnet
https://medium.com/scisharp/using-python-libraries-in-net-without-a-python-installation-11124d6190cf

IronPythonだけじゃないんですね。



スポンサーリンク

関連記事

3Dグラフィックスの入門書
Model View Controller
機械学習での「回帰」とは?
まだ続くブログの不調
OpenCVで動画の手振れ補正
Unity ARKitプラグインサンプルのチュートリアルを読む
機械学習で遊ぶ
iOSデバイスのためのフィジカル・コンピューティングツールキット『konashi(こなし)』
Google製オープンソース機械学習ライブラリ『TensorFlow』のWindows版が公開された
画像中の人物表面のUV座標を推定する『DensePose』
PythonのHTML・XMLパーサー『BeautifulSoup』
オープンソースの取引プラットフォーム
SONYの自律型エンタテインメントロボット『aibo』
オープンソースの物理ベースレンダラ『Mitsuba』をMayaで使う
OpenCVでiPhone6sのカメラをキャリブレーションする
Google XML Sitemap Generatorプラグインを3.4.1へダウングレード
IronPythonを使ってUnity上でPythonのコードを実行する
ドットインストールのWordPress入門レッスン
Python2とPython3
UnityでShaderの入力パラメータとして行列を渡す
ROSでガンダムを動かす
iPhoneアプリ開発 Xcode 5のお作法
スクレイピング
Mitsuba 2:オープンソースの物理ベースレンダラ
OpenCVのバージョン3が正式リリースされたぞ
ブログのデザイン変えました
AfterEffectsプラグイン開発
Unityで使える数値計算ライブラリ『Math.NET Numerics』
ポリゴンジオメトリ処理ライブラリ『pmp-library (Polygon Mesh Process...
takminさんが機械学習・画像認識の便利ツールを公開しています
複数画像から3次元形状を再構築するライブラリ『Multi-View Environment』
WebGL開発に関する情報が充実してきている
AndroidもopenGLも初心者さ (でもJavaは知ってるよ)
iPhone・iPod touchで動作する知育ロボット『ROMO』
PythonのStructure from Motionライブラリ『OpenSfM』
OpenCVで顔のランドマークを検出する『Facemark API』
OpenMVSのサンプルを動かしてみる
OpenCVで顔のモーフィングを実装する
マルコフ連鎖モンテカルロ法
Raspberry PiでIoTごっこ
UnityでTweenアニメーションを実装できる3種類の無料Asset
オープンソースのプリント基板設計ツール『KiCad』

コメント