spark向量矩阵的使用(scala)
2017-04-12 09:38
726 查看
向量和矩阵都是做机器学习的基础,下面来介绍下使用
spark的底层的向量和矩阵是基于Breeze的,下面主要介绍下Breeze的使用,下面直接给代码,代码上有注释
需要引入的包
Breeze 创建函数
Breeze 元素访问
Breeze 数值计算函数
Breeze 求和函数
Breeze 布尔函数
Breeze 线性代数函数
Breeze 取整函数
spark的底层的向量和矩阵是基于Breeze的,下面主要介绍下Breeze的使用,下面直接给代码,代码上有注释
需要引入的包
import breeze.linalg._ import breeze.numerics._ import org.apache.log4j.{Level, Logger} import org.apache.spark.{SparkConf, SparkContext}
Breeze 创建函数
val conf = new SparkConf().setAppName("breezeTest").setMaster("local[3]") val sc = new SparkContext(conf) Logger.getRootLogger.setLevel(Level.WARN) //3.1.1 Breeze 创建函数 //创建0矩阵和向量 val m1 = DenseMatrix.zeros[Double](2,3) val v1 = DenseVector.zeros[Double](3) //创建元素都是1的向量 val v2 = DenseVector.ones[Double](3) //创建指定元素的向量 val v3 = DenseVector.fill(3)(5.0) //根据范围创建向量参数(start,end,step) val v4 = DenseVector.range(1,10,2) //创建对角线为1的矩阵 val m2 = DenseMatrix.eye[Double](3) //创建指定对角线元素的矩阵 val v6 = diag(DenseVector(1.0,2.0,3.0)) //根据向量创建矩阵,每个数组就是一行 val m3 = DenseMatrix((1.0,2.0),(3.0,4.0)) //根据元素创建向量 val v8 = DenseVector(1,2,3,4) //val v9 = v8.t //转置 val v9 = DenseVector(1,2,3,4).t //根据下标创建向量和矩阵 val v10 = DenseVector.tabulate(3){i=>2*i} val m4 = DenseMatrix.tabulate(3,2){case(i,j) =>i+j} //根据数组创建向量和矩阵 val v11 = new DenseVector(Array(1,2,3,4)) val m5 = new DenseMatrix(2,3,Array(11,12,12,21,21,11)) //创建一个随机向量和矩阵 val v12 = DenseVector.rand(4) val m6 = DenseMatrix.rand(2,3)
Breeze 元素访问
//元素访问 val a = DenseVector(1,2,3,4,5,6,7,8,9) //访问指定的元素 a(0) //访问子元素,返回还是一个向量 a(1 to 4) //指定起始和终止位置,和补偿 a(5 to 1 by -1) //-1 代表最后的元素 a(1 to -1) //访问最后元素 a(-1) val m = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0)) //访问指定的元素 m(0,1) //访问某列的元素,返回一个向量 m(::,1) //访问某一行 m(1,::) //元素操作 val m_1 = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0)) //变成3行2列的矩阵 m_1.reshape(3,2) //生成一个向量 m_1.toDenseVector val m_3 = DenseMatrix((1,2,3),(4,5,6),(7,8,9)) //取上三角和下三角 lowerTriangular(m_3) upperTriangular(m_3) //copy生成一个新的矩阵 m_3.copy //对角线生成一个向量 diag(m_3) //改变矩阵里面的元素 m_3(::,2) := 5 m_3 m_3(1 to 2,1 to 2) := 5 m_3 //改变向量里面的元素 val a_1 = DenseVector(1,2,3,4,5,6,7,8,9,10) a_1(1 to 4) := 5 a_1 a_1(1 to 4) := DenseVector(1,2,3,4) a_1 //矩阵的连接和向量的连接 val a1 = DenseMatrix((1,2,3),(4,5,6)) val a2 = DenseMatrix((1,1,1),(2,2,2)) //竖直的连接 DenseMatrix.vertcat(a1,a2) //水平连接 DenseMatrix.horzcat(a1,a2) val b1 = DenseVector(1,2,3,4) val b2 = DenseVector(1,1,1,1) //水平连接 DenseVector.vertcat(b1,b2) //两列的形式连接 DenseVector.horzcat(b1,b2)
Breeze 数值计算函数
val a_3 = DenseMatrix((1,2,3),(4,5,6)) val b_3 = DenseMatrix((1,1,1),(2,2,2)) //对应元素相操作 a_3 + b_3 a_3 :* b_3 a_3 :/ b_3 a_3 :< b_3 a_3 :== b_3 a_3 :+= 1 a_3 :*= 2 max(a_3) //最大值位置的索引 argmax(a_3) //内积 DenseVector(1,2,3,4) dot DenseVector(1,1,1,1)
Breeze 求和函数
val a_4 = DenseMatrix((1,2,3),(4,5,6),(7,8,9)) sum(a_4) //每一列进行求和 12 15 18 sum(a_4,Axis._0) //每一行进行求和 DenseVector(6, 15,24) sum(a_4,Axis._1) //对角线求和 trace(a_4) //把前面的元素相加 DenseVector(1, 3, 6, 10) accumulate(DenseVector(1,2,3,4))
Breeze 布尔函数
val a_5 = DenseVector(true,false,true) val b_5 = DenseVector(false,true,true) a_5 :& b_5 a_5 :| b_5 !a_5 val a_5_2 = DenseVector(1,0,-2) //任意一个元素为0即为true any(a_5_2) //所有元素都为0则为true all(a_5_2)
Breeze 线性代数函数
val a_6 = DenseMatrix((1,2,3),(4,5,6),(7,8,9)) val b_6 = DenseMatrix((1,1,1),(1,1,1),(1,1,1)) a_6 \ b_6 //转置 a_6.t //特征值 det(a_6) //逆 inv(a_6) //矩阵分解(有问题) val svd.SVD(u,s,v) = svd(DenseMatrix(1.1,2.0),(2.0,3.0)) a_6.rows a_6.cols
Breeze 取整函数
val a_7 = DenseVector(1.2,0.6,-2.3) //四舍五入 round(a_7) //往前进位 ceil(a_7) //都舍去 floor(a_7) //正的变为1.0 负的变为-1 0还是0 signum(a_7) //绝对值 abs(a_7)
相关文章推荐
- Scala spark 向量、矩阵类型
- 使用Intellij Idea编写Spark应用程序(Scala+SBT)
- spark中利用向量及其矩阵求逆
- 使用Scala语言开发Spark应用程序是自然而然的事情
- Spark实战----(1)使用Scala开发本地测试的Spark WordCount程序
- 第83课:使用Scala和Java两种方式实战Spark Streaming开发 本地webui小技巧
- Spark学习使用笔记 - Scala篇(1)
- 一步步学spark之一scala面向对象中包的定义与使用2.7
- 第八十三讲 使用Scala实战Spark Streaming开发
- 使用MapReduce实现矩阵向量相乘
- [转]开源Math.NET基础数学类库使用(02)矩阵向量计算
- spark向量、矩阵类型
- spark使用scala时快速输出键值对的值
- Spark streaming kafka1.4.1中的低阶api createDirectStream使用总结(Scala实现)
- 使用Eclipse 4.5 + Maven 3 打包Scala/Spark项目
- 第94讲, 使用Scala开发集群运行的Spark 实现在线黑名单过滤程序
- 第95讲:使用Scala开发集群运行的Spark来实现在线热搜索词获取
- spark向量、矩阵类型
- 使用Spark调用word2vec接口将文本转化为向量
- maven环境下使用java、scala混合开发spark应用