vlambda博客
学习文章列表

Scala Breeze的*和*:*在矩阵和向量中的用法

在机器学习中,矩阵和向量的乘法有很多变形,其中Breeze中针对该运算定义了好几种符号和运算步骤。在自己手写机器学习和深度学习算法的时候经常会用到,这里就给出了平时常用到的一些例子,并加以区分。

矩阵

*    表示常规的线性代数中的矩阵相乘

*:*     表示逐元素的矩阵相乘

val arr1 = Array[Int](1, 2, 3, 4, 5, 6)

 val arr2 = Array[Int](10, 20, 30, 40, 50, 60) var a= new DM(2,3,arr1) var a1= new DM(3,2,arr1)    var a2= new DM(2,3,arr2) println("a *:* a2:")    println(a *:* a2)//表示对应位置的相乘 print("\n") println("a1 * a:")    println(a1 * a)//线性代数矩阵乘法 println("a1 * a:") println(a * a1)//线性代数矩阵乘法

结果为:


向量

向量中*和*:*实现的功能是一样的:

 var a = new DV(Array[Int](1, 2, 3, 4, 5))    var a2 = new DV(Array[Int](1020304050))    println("a*a2 为:")//向量逐元素相乘 println(a * a2)    println("a*:*a2为:")//向量逐元素相乘 println(a *:* a2)    println("a*a.t为:")//列向量乘行向量 println(a * a.t) println("a*:*a.t为:")//行向量乘列向量 println(a.t * a)

输出结果为: