Spark Breez矩阵计算

Spark Breez矩阵计算import breeze linalg import breeze numerics import breeze stats distribution Rand author XiaoTangBao date 2019 3 5 16 16 version 1 0 object

大家好,我是讯享网,很高兴认识大家。
import breeze.linalg._ import breeze.numerics._ import breeze.stats.distributions.Rand / * @author XiaoTangBao * @date 2019/3/5 16:16 * @version 1.0 */ object Breeze { 
    def main(args: Array[String]): Unit = { 
    val matrix: DenseMatrix[Double] = DenseMatrix.zeros[Double](3,2) println(matrix) /* 0.0 0.0 0.0 0.0 0.0 0.0 */ //全0向量 val testVector: DenseVector[Double] = DenseVector.zeros[Double](2) println(testVector) //全1向量 val allOneVector=DenseVector.ones[Double](2) println(allOneVector) //按数值填充向量 val haveNumberFill =DenseVector.fill[Double](3,2) println(haveNumberFill) //生成随机向量 val rangeNUm= DenseVector.range(1, 10 , 2)//DenseVector(1, 3, 5, 7, 9) val rangeNUmD= DenseVector.rangeD(1, 9 , 2)//DenseVector(1.0, 3.0, 5.0, 7.0) val rangeNUmF= DenseVector.rangeF(1, 7 , 2)//DenseVector(1.0, 3.0, 5.0) println(rangeNUm) println(rangeNUmD) println(rangeNUmF) //单位矩阵 val unitMatrix=DenseMatrix.eye[Double](4) // println(unitMatrix) /* 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 */ //对角矩阵 val doubleVecoter=diag(DenseVector(3.0, 4.0 , 5.0)) // println(doubleVecoter) /* 3.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 5.0 */ //按照行创建矩阵 val byRowCreateMatrix= DenseMatrix( (4.0, 5.0, 6.0 ) , (7.0 ,8.0 ,9.0)) // println(byRowCreateMatrix) /* 4.0 5.0 6.0 7.0 8.0 9.0 */ //按照行创建向量 val denseCreateVector = DenseVector((4.0, 5.0, 6.0, 7.0, 8.0, 9.0)) // println(denseCreateVector) ///DenseVector((4.0,5.0,6.0,7.0,8.0,9.0) //向量装置 val vectorTranspostion= DenseVector( (4.0, 5.0, 6.0, 7.0, 8.0, 9.0) ).t println(vectorTranspostion)//Transpose(DenseVector((4.0,5.0,6.0,7.0,8.0,9.0))) //从函数创建向量 val funCreateVector=DenseVector.tabulate(5)(i=> i*i) println(funCreateVector)//DenseVector(0, 1, 4, 9, 16) val funCreateVector2=DenseVector.tabulate( 0 to 5)(i=> i*i) println(funCreateVector2)//DenseVector(0, 1, 4, 9, 16, 25) //从函数创建矩阵 val createFuncMatrix= DenseMatrix.tabulate(3, 4) { 
    case (i ,j ) => i*i + j*j } // println(createFuncMatrix) /* 0 1 4 9 1 2 5 10 4 5 8 13 */ //从数组创建矩阵 val createFunctionMatrix= new DenseMatrix[Double](3, 2, Array(1.0, 4.0, 7.0, 3.0, 6.0, 9.0)) // println(createFunctionMatrix) /* 1.0 3.0 4.0 6.0 7.0 9.0 */ //0 到 1的随机向量 val formZeroToOneRandomVector= DenseVector.rand( 9, Rand.uniform) println(formZeroToOneRandomVector) // DenseVector(0.07369, 0., 0.065834, 0.55139, 0.54981, 0.36415, 0.99107, 0.87078, 0.) val formZeroToOneRandomVector2= DenseVector.rand( 9, Rand.uniform) println(formZeroToOneRandomVector2) //DenseVector(0.07369, 0., 0.065834, 0.55139, 0.54981, 0.36415, 0.99107, 0.87078, 0.) //0 到 1 的随机矩阵 val formZeroToOneRandomMatrix= DenseMatrix.rand(3, 2, Rand.uniform) println(formZeroToOneRandomMatrix) /* 0.18653 0.0035 0.30702 0.49075 0.12897 0.036796 */ val formZeroToOneRandomMatrix2=DenseMatrix.rand(3, 2, Rand.gaussian) println(formZeroToOneRandomMatrix2) /* 0.72648 0.4061 -0.62216 0.81263 -0.72151 -0.57112 */ //Breeze元素访问 val a = new DenseVector[Int](Array(1 to 20 : _*)) println(a)//DenseVector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) //指定位置 println(a(0)) //1 //向量子集 println( a(1 to 4) )//DenseVector(2, 3, 4, 5) println( a(1 until 4) )//DenseVector(2, 3, 4) //指定开始位置至结尾 println( a(1 to -1) )//DenseVector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) //按照指定步长去子集 这个是倒序方式 println( a(5 to 0 by -1) )//DenseVector(6, 5, 4, 3, 2, 1) //最后一个元素 println( a(-1)) //20 val m = DenseMatrix((1.0, 2.0, 3.0), (4.0, 5.0, 6.0)) println(m) /* 1.0 2.0 3.0 4.0 5.0 6.0 */ //指定位置 println( m(0 ,1) ) //2.0 //矩阵指定列 println( m(:: ,1) ) // DenseVector(2.0, 5.0) //Breeze元素操作 //调整矩阵形状 val justAdjustMatrix =m.reshape(3, 2) println(justAdjustMatrix) /* DenseVector(2.0, 5.0) 1.0 5.0 4.0 3.0 2.0 6.0 */ //矩阵转成向量 val toVector=m.toDenseVector println(toVector)//DenseVector(1.0, 4.0, 2.0, 5.0, 3.0, 6.0) println(toVector.toDenseMatrix)//1.0 4.0 2.0 5.0 3.0 6.0 //复制下三角 println(lowerTriangular(m))// /* 1.0 0.0 4.0 5.0 */ //复制上三角 println(upperTriangular(m)) /* 1.0 2.0 0.0 5.0 */ //矩阵复制 println(m.copy) //m 原始为这样的 // 1.0 2.0 // 0.0 5.0 //取对角线元素 println(diag(upperTriangular(m))) //DenseVector(1.0, 5.0) 个人觉得很怪异,不是应该为(1.0, 6.0)吗?上面上、下三角 也好像出乎的意料 //子集赋数值 println(a(1 to 4 ):=5) //(1.0, 5.0) //子集赋向量 println( a(1 to 4):=DenseVector(1,2,3,4) ) //DenseVector(1, 2, 3, 4) println(m) //矩阵赋值 // println( m( 1 to 2, 1 to 2) := 0.0 ) //Exception in thread "main" java.lang.IndexOutOfBoundsException: Row slice of Range(1, 2) was bigger than matrix rows of 2 println("-==========m1================-") println( m( 0 to 1, 1 to 2) := 0.0 ) println("-==========m================-") println(m) println("-==========m end================-") /* -==========m1================- 0.0 0.0 0.0 0.0 -==========m================- 0.0 0.0 3.0 0.0 0.0 6.0 -==========m end================- */ //矩阵列赋值 val re=m(::, 2) := 5.0 println(re.toDenseMatrix) //5.0 5.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)) //垂直连接矩阵 val verticalLike=DenseMatrix.vertcat(a1, a2) println(verticalLike) println("-==========================-") /* 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 */ //横向连接矩阵 val twoMatrixConn=DenseMatrix.horzcat( a1, a2) println(twoMatrixConn) println("-==========================-") /* 1.0 2.0 3.0 7.0 8.0 9.0 4.0 5.0 6.0 10.0 11.0 12.0 */ //向量的连接 val connnectVector1=DenseVector.vertcat(DenseVector(20, 21, 22), DenseVector(23, 24, 25)) val connnectVector2=DenseVector.horzcat(DenseVector(20, 21, 22), DenseVector(23, 24, 25)) println(connnectVector1)//DenseVector(20, 21, 22, 23, 24, 25) println(connnectVector2) /* 20 23 21 24 22 25 */ //Breeze数值计算函数 //元素加法 println(a1 + a2) /* 8.0 10.0 12.0 14.0 16.0 18.0 */ //元素乘法 println(a1 :* a2) /* 7.0 16.0 27.0 40.0 55.0 72.0 */ //元素除法 println(a1 :/ a2) /* 0. 0.25 0.33333 0.4 0. 0.5 */ //元素比较 println(a1 :< a2) /* true true true true true true */ //元素相等 println(a1 :== a2) /* false false false false false false */ //元素追加 println(a1 :+=2.0) /* 3.0 4.0 5.0 6.0 7.0 8.0 */ //元素追乘 println(a1 :*=2.0) /* 6.0 8.0 10.0 12.0 14.0 16.0 */ //向量点积 val vectorDot=DenseVector(1, 2, 3, 4) dot DenseVector(1, 1, 1, 1) println(vectorDot)//10 //元素最大值 println(max(a1))//16.0 //元素最小值 println(min(a1))//6.0 //元素最大值的位置 println(argmax(a1))// (1,2) //元素最小值的位置 println(argmin(a1))// (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)) println(m1) /* 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 */ println("-==========================-") //元素求和 println(sum(m1))//78.0 //每一列求和 println(sum(m1, Axis._0))//res59: breeze.linalg.DenseMatrix[Double] = 15.0 18.0 21.0 24.0 //每一行求和 println(sum(m1, Axis._1))//res60: breeze.linalg.DenseVector[Double] = DenseVector(10.0, 26.0, 42.0) //对角线元素和 println(trace(lowerTriangular(m1)))// res61: Double = 18.0 //累积和 val a3 = new DenseVector[Int](Array(10 to 20: _*)) println(accumulate(a3)) // 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) //元素与操作 println(c :& d) // DenseVector(false, false, true) //元素或操作 println(c :| d) //DenseVector(true, true, true) //元素非操作 println(!c) //DenseVector(false, true, false) val e = DenseVector[Int](-3, 0, 2) //存在非零元素 println(any(e)) //true //所有元素非零 println(all(e)) //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)) //线性求解,AX = B,求解X println(f \ g) /* breeze.linalg.DenseMatrix[Double] = -2.5 -2.5 -2.5 4.0 4.0 4.0 -1.5 -1.5 -1.5 */ //转置 println(f.t) /* breeze.linalg.DenseMatrix[Double] = 1.0 4.0 7.0 2.0 5.0 8.0 3.0 6.0 9.0 */ //求特征值和特征向量------勘误 println(eigSym(a)) //求矩阵的值 println(det(f)) // Double = 6.0939E-16 //求逆 println(inv(f)) /* -4.0499E15 9.0092E15 -4.0495E15 9.0098E15 -1.81984E16 9.0091E15 -4.0498E15 9.0092E15 -4.04955E15 */ //求伪逆 println(pinv(f)) /* -3.30525E14 7.6101E14 -3.305E14 7.6094E14 -1.32208E15 7.6108E14 -3.3041E14 7.6104E14 -3.3055E14 */ //特征值和特征向量 println(eig(f)) /* Eig(DenseVector(16.7043, -1.70427, -1.47022E-15),DenseVector(0.0, 0.0, 0.0),-0. -0.20671 0. -0.12336 -0.062833 -0.7726 -0.61815 0.881 0.38625 ) */ //奇异值分解 val svd.SVD(u,s,v) = svd(g) println(u) /* -0.96255 -0.96257 -0.96256 -0.96256 -0.51871 0.48126 -0.96256 0.48129 -0. */ println("==============================") println(s) //DenseVector(3.0000000000000004, 0.0, 0.0) println("==============================") println(v) /* -0.96256 -0.96257 -0.96256 0.0 -0.65474 0.65477 0.7726 -0.38629 -0.38628 */ //求矩阵的秩 println(rank(f)) //2 //矩阵长度 println(f.size) //9 //矩阵行数 println(f.rows) // 3 //矩阵列数 f.cols // 3 //Breeze取整函数 val h = DenseVector(-1.2, 0.7, 2.3) // breeze.linalg.DenseVector[Double] = DenseVector(-1.2, 0.7, 2.3) //四舍五入 println( round(h) ) // breeze.linalg.DenseVector[Long] = DenseVector(-1, 1, 2) //大于它的最小整数 println( ceil(h) ) // breeze.linalg.DenseVector[Double] = DenseVector(-1.0, 1.0, 3.0) //小于它的最大整数 println( floor(h) ) // breeze.linalg.DenseVector[Double] = DenseVector(-2.0, 0.0, 2.0) //符号函数 println( signum(h) ) // breeze.linalg.DenseVector[Double] = DenseVector(-1.0, 1.0, 1.0) //取正数 println( abs(h) ) // breeze.linalg.DenseVector[Double] = DenseVector(1.2, 0.7, 2.3) } } 

讯享网
小讯
上一篇 2025-03-15 10:57
下一篇 2025-03-02 19:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/41649.html