ボンジニアの備忘録

中小SIerからWeb系のベンチャーに企業に転職。基本的にはごく普通の平凡なエンジニアです。思ったことをつらつら書いていきます。

numpyライクなElixirのライブラリー開発日誌(1)

はじめに

みなさん、こんにちはyujikawaです。
普段業務ではPythonをメインに使ったお仕事をこなしているのですが、とある方からの勧めでElixirを学ぶようになりました。
自分自身これまで色々なシステムに関わってきて、耐障害性に強くスケールしやすいという特徴を持ったElixirに大きく興味を持ちました。
Elixirのことを知りたい方はこのあたりのスライドをご確認いただけると色々わかると思います。

www.slideshare.net
かなりお世話になっている@piacereさんのスライドを引用させていただきます。

本題に入りますが、今はElixir初心者なのですがこれからもっと学びたいので自分なりのテーマを決めました。それがnumpyライクなElixirライブラリー開発です。

numpyというとPythonの行列計算ができるライブラリーですね。最近の機械学習の分野でもかなり使われているライブラリーです。ElixirにもMatrixのライブラリーはちらほら見かけます。

ひょっとしたら天才がすごく良いライブラリーをElixirで作っているかもしれませんが、僕は気にせずに車輪の再発明します。個人的には勉強がてら車輪の再発明するのは良いことだと思っています。

プログラム開発

構造体の作成

まずはnumpy.arrayのようなオリジナルの型を使いたかったので、defstructを使って構造体にしました。

iex> x = Numexy.new([1,2,3])
%Array{array: [1, 2, 3], shape: {3, nil}}

Pythonで言う所のこれ

In [1]: numpy.array([1,2,3])

ベクトル間の内積

次はベクトル間の内積です。何となく内積求めたいと思ったので先に作り始めました。

iex> x = Numexy.new([1,2,3])
%Array{array: [1, 2, 3], shape: {3, nil}}

iex> y = Numexy.new([1,2,3])
%Array{array: [1, 2, 3], shape: {3, nil}}

iex> Numexy.dot(x, y)
14

Pythonで言う所のこれ

In [1]: numpy.dot(x, y)

まとめ

ひとまず、ベクトルの内積までできたが行列の計算どうしようと頭悩ませています。
でも新しい言語を触って、知らないことに触れるのはすごく楽しいですよね!
逐一機能を追加していきますので、興味がある方は見守ってください(笑)

次はこちらです。
- numpyライクなElixirのライブラリー開発日誌(2) - ボンジニアの備忘録


ツイッターもやっていますのでよかったらフォローをしていただけると嬉しいです。
twitter.com