spark向量矩阵的使用(scala)
来源:互联网 发布:淘宝专业版免费模板 编辑:程序博客网 时间:2024/05/29 02:20
向量和矩阵都是做机器学习的基础,下面来介绍下使用
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)
1 0
- spark向量矩阵的使用(scala)
- Scala spark 向量、矩阵类型
- spark向量、矩阵类型
- spark向量、矩阵类型
- Spark MLlib之使用Breeze操作矩阵向量
- spark矩阵向量-矩阵矩阵相乘
- scala/spark/python使用
- Spark MLlib 核心基础:向量 And 矩阵
- 向量,矩阵的范数
- 矩阵、向量的变换
- 矩阵、向量的求导
- 矩阵(向量)求导
- 秩为1的矩阵,向量,绩的联合使用
- Scala语言 + Spark MLLib进行机器学习---支持向量机
- spark rdd scala相关使用
- Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API
- 使用IDEA编写基于Scala的spark程序中的常见问题
- 【spark】使用scala读取项目中的文件的方法
- UITableView代理方法解释
- Thinkphp搜索附带分页
- 缺少msvcr110.dll
- 题目1016:火星A+B
- python Sessions和Cookies区别
- spark向量矩阵的使用(scala)
- JDBC连接mySql数据库
- udf开发——解hive外表中的pb二进制数据
- 十步学习法
- 如何提高工作效率
- 开发Java准备
- 关于silly
- 集成开发环境MyEclipse介绍
- Spring+CXF开发基于SOAP协议的WebService