Spark MLlib之使用Breeze操作矩阵向量

来源:互联网 发布:vb case语句的用法 编辑:程序博客网 时间:2024/05/29 02:41

在使用Breeze 库时,需要导入相关包:

import breeze.linalg._import breeze.numerics._

Breeze创建函数

//全0矩阵DenseMatrix.zeros[Double](3,2)res0: breeze.linalg.DenseMatrix[Double] =0.0  0.0  0.0  0.0  0.0  0.0  //全0向量DenseVector.zeros[Double](2)res1: breeze.linalg.DenseVector[Double] = DenseVector(0.0, 0.0)//全1向量DenseVector.ones[Double](2)res2: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 1.0)//按数值填充向量DenseVector.fill[Double](3, 2)res3: breeze.linalg.DenseVector[Double] = DenseVector(2.0, 2.0, 2.0)//生成随机向量DenseVector.range(1, 9, 2)DenseVector.rangeD(1, 9, 2)DenseVector.rangeF(1, 9, 2)res4: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5, 7)res5: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 3.0, 5.0, 7.0)res6: breeze.linalg.DenseVector[Float] = DenseVector(1.0, 3.0, 5.0, 7.0)//单位矩阵DenseMatrix.eye[Double](4)res7: breeze.linalg.DenseMatrix[Double] = 1.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  1.0  //对角矩阵diag(DenseVector(3.0, 4.0, 5.0))res8: breeze.linalg.DenseMatrix[Double] = 3.0  0.0  0.0  0.0  4.0  0.0  0.0  0.0  5.0 //按照行创建矩阵DenseMatrix((4.0, 5.0, 6.0), (7.0, 8.0, 9.0))res9: breeze.linalg.DenseMatrix[Double] = 4.0  5.0  6.0  7.0  8.0  9.0  //按照行创建向量DenseVector((4.0, 5.0, 6.0, 7.0, 8.0, 9.0))res10: breeze.linalg.DenseVector[(Double, Double, Double, Double, Double, Double)] = DenseVector((4.0,5.0,6.0,7.0,8.0,9.0))//向量转置DenseVector((4.0, 5.0, 6.0, 7.0, 8.0, 9.0)).tres11: breeze.linalg.Transpose[breeze.linalg.DenseVector[(Double, Double, Double, Double, Double, Double)]] = Transpose(DenseVector((4.0,5.0,6.0,7.0,8.0,9.0)))//从函数创建向量DenseVector.tabulate(5)(i => i*i)DenseVector.tabulate(0 to 5)(i => i*i)res12: breeze.linalg.DenseVector[Int] = DenseVector(0, 1, 4, 9, 16)res13: breeze.linalg.DenseVector[Int] = DenseVector(0, 1, 4, 9, 16, 25)//从函数创建矩阵DenseMatrix.tabulate(3, 4){ case (i, j) => i*i+j*j }res14: breeze.linalg.DenseMatrix[Int] = 0  1  4  9   1  2  5  10  4  5  8  13  //从数组创建向量new DenseVector[Double](Array(2.0, 5.0, 8.0))res15: breeze.linalg.DenseVector[Double] = DenseVector(2.0, 5.0, 8.0)//从数组创建矩阵new DenseMatrix[Double](3, 2, Array(1.0, 4.0, 7.0, 3.0, 6.0, 9.0))res16: breeze.linalg.DenseMatrix[Double] = 1.0  3.0  4.0  6.0  7.0  9.0  //01的随机向量DenseVector.rand(9, Rand.uniform)DenseVector.rand(9, Rand.gaussian)res17: breeze.linalg.DenseVector[Double] = DenseVector(0.30960687979350654, 0.5779984012083466, 0.4880956198283952, 0.1013947992922748, 0.19635570812305936, 0.8533170989347008, 0.6619843996111201, 0.03131533370356321, 0.5430592884856604)res18: breeze.linalg.DenseVector[Double] = DenseVector(0.48361471134641176, -1.734778260551877, -0.7319505628964431, 0.19971267958211184, -1.033191008131693, -1.7961545888066046, 0.2364555601503527, 0.22843047924270285, 1.7288956723034343)//01的随机矩阵DenseMatrix.rand(3, 2, Rand.uniform)DenseMatrix.rand(3, 2, Rand.gaussian)res19: breeze.linalg.DenseMatrix[Double] = 0.11270960774886585  0.19871332589909851  0.5581898434134047   0.8295064603050235   0.8692650535288642   0.4015512971620494   res20: breeze.linalg.DenseMatrix[Double] = 0.712041684728872     2.7007736007506216   0.053520407807479485  0.19044772577405517  -0.7370909025873376   -1.024737052742153   

Breeze元素访问

val a = new DenseVector[Int](Array(10 to 20: _*))a: breeze.linalg.DenseVector[Int] = DenseVector(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)//指定位置a(0)res21: Int = 10//向量子集a(1 to 4)res22: breeze.linalg.DenseVector[Int] = DenseVector(11, 12, 13, 14)//按照指定步长取子集a(5 to 0 by -1)res23: breeze.linalg.DenseVector[Int] = DenseVector(15, 14, 13, 12, 11, 10)//指定开始位置至结尾a(1 to -1)res24: breeze.linalg.DenseVector[Int] = DenseVector(11, 12, 13, 14, 15, 16, 17, 18, 19, 20)//最后一个元素a(-1)res25: Int = 20val m = DenseMatrix((1.0, 2.0, 3.0), (4.0, 5.0, 6.0))m: breeze.linalg.DenseMatrix[Double] = 1.0  2.0  3.0  4.0  5.0  6.0  //指定位置m(0, 1)res26: Double = 2.0//矩阵指定列m(::, 1)res27: breeze.linalg.DenseVector[Double] = DenseVector(2.0, 6.0, 10.0)

Breeze元素操作

//调整矩阵形状m.reshape(4, 3)res28: breeze.linalg.DenseMatrix[Double] = 1.0  6.0   11.0  5.0  10.0  4.0   9.0  3.0   8.0   2.0  7.0   12.0 //矩阵转成向量m.toDenseVectorres29: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 5.0, 9.0, 2.0, 6.0, 10.0, 3.0, 7.0, 11.0, 4.0, 8.0, 12.0)//复制下三角lowerTriangular(m)res30: breeze.linalg.DenseMatrix[Double] = 1.0  0.0   0.0   5.0  6.0   0.0   9.0  10.0  11.0  //复制上三角upperTriangular(m)res31: breeze.linalg.DenseMatrix[Double] = 1.0  2.0  3.0   0.0  6.0  7.0   0.0  0.0  11.0  //矩阵复制m.copyres32: breeze.linalg.DenseMatrix[Double] = 1.0  2.0   3.0   4.0   5.0  6.0   7.0   8.0   9.0  10.0  11.0  12.0  //取对角线元素diag(upperTriangular(m))res33: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 6.0, 11.0)//子集赋数值a(1 to 4) := 5ares34: breeze.linalg.DenseVector[Int] = DenseVector(5, 5, 5, 5)res35: breeze.linalg.DenseVector[Int] = DenseVector(10, 5, 5, 5, 5, 15, 16, 17, 18, 19, 20)//子集赋向量a(1 to 4) := DenseVector(1, 2, 3, 4)ares36: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4)res37: breeze.linalg.DenseVector[Int] = DenseVector(10, 1, 2, 3, 4, 15, 16, 17, 18, 19, 20)//矩阵赋值m(1 to 2,1 to 2) := 0.0mres38: breeze.linalg.DenseMatrix[Double] = 0.0  0.0  0.0  0.0  res39: breeze.linalg.DenseMatrix[Double] = 1.0  2.0  3.0  4.0   5.0  0.0  0.0  8.0   9.0  0.0  0.0  12.0 //矩阵列赋值m(::, 2) := 5.0mres40: breeze.linalg.DenseVector[Double] = DenseVector(5.0, 5.0, 5.0)res41: breeze.linalg.DenseMatrix[Double] = 1.0  2.0  5.0  4.0   5.0  0.0  5.0  8.0   9.0  0.0  5.0  12.0  val a1 = DenseMatrix((1.0, 2.0, 3.0), (4.0, 5.0, 6.0))val a2 = DenseMatrix((7.0, 8.0, 9.0), (10.0, 11.0, 12.0))a1: breeze.linalg.DenseMatrix[Double] = 1.0  2.0  3.0  4.0  5.0  6.0  a2: breeze.linalg.DenseMatrix[Double] = 7.0   8.0   9.0   10.0  11.0  12.0 //垂直连接矩阵DenseMatrix.vertcat(a1, a2)res42: breeze.linalg.DenseMatrix[Double] = 1.0   2.0   3.0   4.0   5.0   6.0   7.0   8.0   9.0   10.0  11.0  12.0 //横向连接矩阵DenseMatrix.horzcat(a1, a2)res43: breeze.linalg.DenseMatrix[Double] = 1.0  2.0  3.0  7.0   8.0   9.0   4.0  5.0  6.0  10.0  11.0  12.0  //向量连接DenseVector.vertcat(DenseVector(20, 21, 22), DenseVector(23, 24, 25))DenseVector.horzcat(DenseVector(20, 21, 22), DenseVector(23, 24, 25))res44: breeze.linalg.DenseVector[Int] = DenseVector(20, 21, 22, 23, 24, 25)res45: breeze.linalg.DenseMatrix[Int] = 20  23  21  24  22  25 

Breeze数值计算函数

//元素加法a1 + a2res46: breeze.linalg.DenseMatrix[Double] = 8.0   10.0  12.0  14.0  16.0  18.0  //元素乘法a1 :* a2res47: breeze.linalg.DenseMatrix[Double] = 7.0   16.0  27.0  40.0  55.0  72.0  //元素除法a1 :/ a2res48: breeze.linalg.DenseMatrix[Double] = 0.14285714285714285  0.25                 0.3333333333333333  0.4                  0.45454545454545453  0.5//元素比较a1 :< a2res49: breeze.linalg.DenseMatrix[Boolean] = true  true  true  true  true  true //元素相等a1 :== a2res50: breeze.linalg.DenseMatrix[Boolean] = false  false  false  false  false  false //元素追加a1 :+=2.0res51: breeze.linalg.DenseMatrix[Double] = 3.0  4.0  5.0  6.0  7.0  8.0 //元素追乘a1 :*=2.0res52: breeze.linalg.DenseMatrix[Double] = 6.0   8.0   10.0  12.0  14.0  16.0//向量点积DenseVector(1, 2, 3, 4) dot DenseVector(1, 1, 1, 1)res53: Int = 10//元素最大值max(a1)res54: Double = 16.0//元素最小值min(a1)res55: Double = 6.0//元素最大值的位置argmax(a1)res56: (Int, Int) = (1,2)//元素最小值的位置argmin(a1)res57: (Int, Int) = (0,0)

Breeze求和函数

val m1 = DenseMatrix((1.0, 2.0, 3.0, 4.0), (5.0, 6.0, 7.0, 8.0), (9.0, 10.0, 11.0, 12.0))m1: breeze.linalg.DenseMatrix[Double] = 1.0  2.0   3.0   4.0   5.0  6.0   7.0   8.0   9.0  10.0  11.0  12.0  //元素求和sum(m1)res58: Double = 78.0//每一列求和sum(m1, Axis._0)res59: breeze.linalg.DenseMatrix[Double] = 15.0  18.0  21.0  24.0//每一行求和sum(m1, Axis._1)res60: breeze.linalg.DenseVector[Double] = DenseVector(10.0, 26.0, 42.0)//对角线元素和trace(lowerTriangular(m1))res61: Double = 18.0//累积和val a3 = new DenseVector[Int](Array(10 to 20: _*))accumulate(a3)a3: breeze.linalg.DenseVector[Int] = DenseVector(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)res62: breeze.linalg.DenseVector[Int] = DenseVector(10, 21, 33, 46, 60, 75, 91, 108, 126, 145, 165)

Breeze布尔函数

val c = DenseVector(true, false, true)val d = DenseVector(false, true, true)//元素与操作c :& dres63: breeze.linalg.DenseVector[Boolean] = DenseVector(false, false, true)//元素或操作c :| dres64: breeze.linalg.DenseVector[Boolean] = DenseVector(true, true, true)//元素非操作!cres65: breeze.linalg.DenseVector[Boolean] = DenseVector(false, true, false)val e = DenseVector[Int](-3, 0, 2)e: breeze.linalg.DenseVector[Int] = DenseVector(-3, 0, 2)//存在非零元素any(e)res66: Boolean = true//所有元素非零all(e)res67: Boolean = false

Breeze线性代数函数

val f = DenseMatrix((1.0, 2.0, 3.0), (4.0, 5.0, 6.0), (7.0, 8.0, 9.0))val g = DenseMatrix((1.0, 1.0, 1.0), (1.0, 1.0, 1.0), (1.0, 1.0, 1.0))f: breeze.linalg.DenseMatrix[Double] = 1.0  2.0  3.0  4.0  5.0  6.0  7.0  8.0  9.0  g: breeze.linalg.DenseMatrix[Double] = 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  //线性求解,AX = B,求解Xf \ gres68: breeze.linalg.DenseMatrix[Double] = -2.5  -2.5  -2.5  4.0   4.0   4.0   -1.5  -1.5  -1.5//转置f.tres69: breeze.linalg.DenseMatrix[Double] = 1.0  4.0  7.0  2.0  5.0  8.0  3.0  6.0  9.0 //求特征值det(f)res70: Double = 6.661338147750939E-16//求逆inv(f)res71: breeze.linalg.DenseMatrix[Double] = -4.503599627370499E15  9.007199254740992E15    -4.503599627370495E15   9.007199254740998E15   -1.8014398509481984E16  9.007199254740991E15    -4.503599627370498E15  9.007199254740992E15    -4.5035996273704955E15//求伪逆pinv(f)res72: breeze.linalg.DenseMatrix[Double] = -3.7720834019330525E14  7.544166803866101E14    -3.77208340193305E14   7.544166803866094E14    -1.5088333607732208E15  7.544166803866108E14   -3.772083401933041E14   7.544166803866104E14    -3.772083401933055E14  //特征值和特征向量eig(f)res73: breeze.linalg.eig.DenseEig = Eig(DenseVector(16.116843969807043, -1.1168439698070427, -1.3036777264747022E-15),   DenseVector(0.0, 0.0, 0.0),-0.23197068724628617  -0.7858302387420671   0.40824829046386363  -0.5253220933012336   -0.08675133925662833  -0.816496580927726   -0.8186734993561815   0.61232756022881      0.4082482904638625  )//奇异值分解val svd.SVD(u,s,v) = svd(g)u: breeze.linalg.DenseMatrix[Double] = -0.5773502691896255  -0.5773502691896257  -0.5773502691896256   -0.5773502691896256  -0.2113248654051871  0.7886751345948126    -0.5773502691896256  0.7886751345948129   -0.21132486540518708  s: breeze.linalg.DenseVector[Double] = DenseVector(3.0000000000000004, 0.0, 0.0)v: breeze.linalg.DenseMatrix[Double] = -0.5773502691896256  -0.5773502691896257  -0.5773502691896256  0.0                  -0.7071067811865474  0.7071067811865477   0.816496580927726    -0.4082482904638629  -0.4082482904638628//求矩阵的秩rank(f)res74: Int = 2//矩阵长度f.sizeres75: Int = 9//矩阵行数f.rowsres76: Int = 3//矩阵列数f.colsres77: Int = 3

Breeze取整函数

val h = DenseVector(-1.2, 0.7, 2.3)h: breeze.linalg.DenseVector[Double] = DenseVector(-1.2, 0.7, 2.3)//四舍五入round(h)res78: breeze.linalg.DenseVector[Long] = DenseVector(-1, 1, 2)//大于它的最小整数ceil(h)res79: breeze.linalg.DenseVector[Double] = DenseVector(-1.0, 1.0, 3.0)//小于它的最大整数floor(h)res80: breeze.linalg.DenseVector[Double] = DenseVector(-2.0, 0.0, 2.0)//符号函数signum(h)res81: breeze.linalg.DenseVector[Double] = DenseVector(-1.0, 1.0, 1.0)//取正数abs(h)res82: breeze.linalg.DenseVector[Double] = DenseVector(1.2, 0.7, 2.3)
原创粉丝点击