KZKY memo

自分用メモ.

Scala Breeze 触った

ScalaでLinear Algebraic操作ということでMLlibも使ってるbreezeを触った.

用語

  • Broadcasting
    • column-wise, row-wiseの操作をしたい時

注意する点

  • カラムベクタなのでパフォーマンス発揮したいときは気をつける
  • スライスには,Rangeを使う
  • スライスは,first to last, なので最後の要素は排他でない
  • Mutable
  • sparse matrixはcsc (under developtment)

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)