Breeze函数介绍
(欢迎加qq1204738320学习交流)
Spark MLlib底层的向量、矩阵运算使用了Breeze库,Breeze库提供了Vector/Matrix的实现以及
相应计算的接口(Linalg)。但是在MLlib里面同时也提供了Vector和Linalg等的实现
导包:
import breeze.linalg._
import breeze.numerics._
创建2行3列零矩阵
scala> val m1 = DenseMatrix.zeros[Double](2,3)
m1: breeze.linalg.DenseMatrix[Double] =
0.0 0.0 0.0
0.0 0.0 0.0
相应计算的接口(Linalg)。但是在MLlib里面同时也提供了Vector和Linalg等的实现
导包:
import breeze.linalg._
import breeze.numerics._
创建2行3列零矩阵
scala> val m1 = DenseMatrix.zeros[Double](2,3)
m1: breeze.linalg.DenseMatrix[Double] =
0.0 0.0 0.0
0.0 0.0 0.0
创建3维0向量
scala> val m2 = DenseVector.zeros[Double](3)
m2: breeze.linalg.DenseVector[Double] = DenseVector(0.0, 0.0, 0.0)
scala> val m2 = DenseVector.zeros[Double](3)
m2: breeze.linalg.DenseVector[Double] = DenseVector(0.0, 0.0, 0.0)
一般矩阵的创建方式
1、 val m1 =new DenseMatrix(2,3,Array(1,3,4,6,2,9))
2、val m3 =DenseMatrix((1,3,4),(6,2,9))
1、 val m1 =new DenseMatrix(2,3,Array(1,3,4,6,2,9))
2、val m3 =DenseMatrix((1,3,4),(6,2,9))
矩阵操作
1、创建0矩阵,泛型可指定,常见的有Int,Double
scala> val m1=DenseMatrix.zeros[Int](2,3)
m1: breeze.linalg.DenseMatrix[Int] =
0 0 0
0 0 0
2、创建单位矩阵(泛型可指定)
scala> val m2=DenseMatrix.eye[Double](3)
m2: breeze.linalg.DenseMatrix[Double] =
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
3、创建一般矩阵
scala> val m3=new DenseMatrix(2,3,Array(1,2,3,4,5,6)) 按照列存储
m3: breeze.linalg.DenseMatrix[Int] =
1 3 5
2 4 6
或:
scala> val m4=DenseMatrix((1,2,3),(4,5,6))
m4: breeze.linalg.DenseMatrix[Int] =
1 2 3
4 5 6
4、创建索引计算的矩阵
scala> val m5=DenseMatrix.tabulate(2,3){case(i,j)=>i+j}
m5: breeze.linalg.DenseMatrix[Int] =
0 1 2
1 2 3
5、创建指定维数的随机矩阵
scala> val m6=DenseMatrix.rand(2,3)
m6: breeze.linalg.DenseMatrix[Double] =
0.58472563118641 0.42448602137330194 0.5038129191085019
0.10258036346499955 0.6586473595881419 0.9923291338029836
scala> val m1=DenseMatrix.zeros[Int](2,3)
m1: breeze.linalg.DenseMatrix[Int] =
0 0 0
0 0 0
2、创建单位矩阵(泛型可指定)
scala> val m2=DenseMatrix.eye[Double](3)
m2: breeze.linalg.DenseMatrix[Double] =
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
3、创建一般矩阵
scala> val m3=new DenseMatrix(2,3,Array(1,2,3,4,5,6)) 按照列存储
m3: breeze.linalg.DenseMatrix[Int] =
1 3 5
2 4 6
或:
scala> val m4=DenseMatrix((1,2,3),(4,5,6))
m4: breeze.linalg.DenseMatrix[Int] =
1 2 3
4 5 6
4、创建索引计算的矩阵
scala> val m5=DenseMatrix.tabulate(2,3){case(i,j)=>i+j}
m5: breeze.linalg.DenseMatrix[Int] =
0 1 2
1 2 3
5、创建指定维数的随机矩阵
scala> val m6=DenseMatrix.rand(2,3)
m6: breeze.linalg.DenseMatrix[Double] =
0.58472563118641 0.42448602137330194 0.5038129191085019
0.10258036346499955 0.6586473595881419 0.9923291338029836
向量操作
1、建立0向量
scala> val v1 = DenseVector.zeros[Double](3)
v1: breeze.linalg.DenseVector[Double] = DenseVector(0.0, 0.0, 0.0)
2、建立单位向量
scala> val v2 = DenseVector.ones[Double](3)
v2: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 1.0, 1.0)
3、数字填充向量
scala> val v3=DenseVector.fill(3){5}
v3: breeze.linalg.DenseVector[Int] = DenseVector(5, 5, 5)
4、边界步长向量
scala> val v4=DenseVector.range(1,10,2)
v4: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5, 7, 9)
5、对角阵
scala> val v5=diag(DenseVector(1,2,3))
v5: breeze.linalg.DenseMatrix[Int] =
1 0 0
0 2 0
0 0 3
6、建立一般行向量
scala> val v6=DenseVector(1,2,3,4)
v6: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4)
7、建立一般列向量
scala> val v7=DenseVector(1,1,1,1).t
v7: breeze.linalg.Transpose[breeze.linalg.DenseVector[Int]] = Transpose(DenseVector(1, 1, 1, 1))
8、建立指定维数的随机向量
scala> val v8=DenseVector.rand(3)
v8: breeze.linalg.DenseVector[Double] = DenseVector(0.4516977975198784, 0.7437508243707496, 0.7636911432772242)
scala> val v1 = DenseVector.zeros[Double](3)
v1: breeze.linalg.DenseVector[Double] = DenseVector(0.0, 0.0, 0.0)
2、建立单位向量
scala> val v2 = DenseVector.ones[Double](3)
v2: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 1.0, 1.0)
3、数字填充向量
scala> val v3=DenseVector.fill(3){5}
v3: breeze.linalg.DenseVector[Int] = DenseVector(5, 5, 5)
4、边界步长向量
scala> val v4=DenseVector.range(1,10,2)
v4: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5, 7, 9)
5、对角阵
scala> val v5=diag(DenseVector(1,2,3))
v5: breeze.linalg.DenseMatrix[Int] =
1 0 0
0 2 0
0 0 3
6、建立一般行向量
scala> val v6=DenseVector(1,2,3,4)
v6: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4)
7、建立一般列向量
scala> val v7=DenseVector(1,1,1,1).t
v7: breeze.linalg.Transpose[breeze.linalg.DenseVector[Int]] = Transpose(DenseVector(1, 1, 1, 1))
8、建立指定维数的随机向量
scala> val v8=DenseVector.rand(3)
v8: breeze.linalg.DenseVector[Double] = DenseVector(0.4516977975198784, 0.7437508243707496, 0.7636911432772242)
元素访问
矩阵元素访问
scala> val m3=new DenseMatrix(2,3,Array(1,2,3,4,5,6))
m3: breeze.linalg.DenseMatrix[Int] =
1 3 5
2 4 6
1、指定行列
scala> m3(0,1)
res1: Int = 3
2、最后一个元素
scala> m3(-1,-1)
res5: Int = 6
3、倒取元素
scala> m3(-1,-2)
res7: Int = 4
4、取第一列
scala> m3(::,1)
res8: breeze.linalg.DenseVector[Int] = DenseVector(3, 4)
5、取第0行
scala> m3(0,::)
res9: breeze.linalg.Transpose[breeze.linalg.DenseVector[Int]] = Transpose(DenseVector(1, 3, 5))
scala> val m3=new DenseMatrix(2,3,Array(1,2,3,4,5,6))
m3: breeze.linalg.DenseMatrix[Int] =
1 3 5
2 4 6
1、指定行列
scala> m3(0,1)
res1: Int = 3
2、最后一个元素
scala> m3(-1,-1)
res5: Int = 6
3、倒取元素
scala> m3(-1,-2)
res7: Int = 4
4、取第一列
scala> m3(::,1)
res8: breeze.linalg.DenseVector[Int] = DenseVector(3, 4)
5、取第0行
scala> m3(0,::)
res9: breeze.linalg.Transpose[breeze.linalg.DenseVector[Int]] = Transpose(DenseVector(1, 3, 5))
向量元素访问
scala> val v4=DenseVector.range(1,10,2)
v4: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5, 7, 9)
1、取指定坐标元素
scala> v4(0)
res13: Int = 1
2、取最后一个元素
scala> v4(-1)
res14: Int = 9
3、指定坐标范围
scala> v4(1 to 3)
res15: breeze.linalg.DenseVector[Int] = DenseVector(3, 5, 7)
4、取全部元素
scala> v4(0 to -1 )
res19: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5, 7, 9)
scala> val v4=DenseVector.range(1,10,2)
v4: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5, 7, 9)
1、取指定坐标元素
scala> v4(0)
res13: Int = 1
2、取最后一个元素
scala> v4(-1)
res14: Int = 9
3、指定坐标范围
scala> v4(1 to 3)
res15: breeze.linalg.DenseVector[Int] = DenseVector(3, 5, 7)
4、取全部元素
scala> v4(0 to -1 )
res19: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5, 7, 9)