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](10, 20, 30, 40, 50))
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)
输出结果为: