Scala Breeze 触った
ScalaでLinear Algebraic操作ということでMLlibも使ってるbreezeを触った.
用語
- Broadcasting
- column-wise, row-wiseの操作をしたい時
Linear Algebra Cheating
https://github.com/scalanlp/breeze/wiki/Linear-Algebra-Cheat-Sheet
を見る
注意する点
Counter
counter, counter2というのがあって,
- counterは任意のキータイプを受け取れるVector.
- counter2は任意のキータイプを2つ受け取れるMatrixのようなもの.
- row->col->valの様.
matrix の操作
- matrix.foreachKey[U]{K => U}
- matrix.foreachValue[U]{V => U}
- matrix.foreachPair[U]{(K, V) => U}
超基本操作
超基本操作は抑えたいということで,
ベクトル/行列の作成,element-wise和と積, dot積,行列の走査,スライシング,
のワークシート上のコードを貼り付けておく.
基本的なpdfもあるみたいなので,Gaussian Distributionの例も.
import breeze.linalg._ // Dense vector val x = DenseVector.zeros[Double](5) x(1) = 2.0 x(2 to 4) := 5.0 // Dense matrix val z = DenseMatrix.zeros[Double](5, 5) z(3, ::) := 5.0 z :+= 10.0 z := 5.0 // Sparse matrix (Compressed Sparse Column martix) val builder = new CSCMatrix.Builder[Double](rows=10, cols=10) builder.add(3,4, 1.0) val myMatrix = builder.result() myMatrix.update(4, 3, 5.0) myMatrix val eMulMatirx = myMatrix :* myMatrix val mulMatrix = myMatrix * myMatrix mulMatrix.foreachPair{(k, v) => println(s"matrix(${k._1}, ${k._2}) = ${v}")} // Counter2 val m = Counter2((4,"b", -1), (5,"b", -2) ) m(5, ::) m(::, "b") // Distribution import breeze.stats.{distributions => bd} val gaussian = bd.Gaussian(0.0, 1.0) gaussian.sample(10)
参考
- https://github.com/scalanlp/breeze
- https://github.com/scalanlp/breeze/wiki/Quickstart
- https://github.com/scalanlp/breeze/wiki/Linear-Algebra-Cheat-Sheet
- https://github.com/scalanlp/breeze/wiki/Data-Structures
- https://api.genmymodel.com/projects/a690dcbc-64c8-4101-97dd-59f64597f5b7/diagrams/_XELXc3b9EDGZRv1Ax7bzSg/svg