spark向量矩阵的使用(scala)

 

向量和矩阵都是做机器学习的基础,下面来介绍下使用spark的底层的向量和矩阵是基于Breeze的,下面主要介绍下Breeze的使用,下面直接给代码,代码上有注释
需要引入的包

 
  1. import breeze.linalg._

  2. import breeze.numerics._

  3. import org.apache.log4j.{Level, Logger}

  4. import org.apache.spark.{SparkConf, SparkContext}

Breeze 创建函数

 
  1. val conf = new SparkConf().setAppName("breezeTest").setMaster("local[3]")

  2. val sc = new SparkContext(conf)

  3. Logger.getRootLogger.setLevel(Level.WARN)

  4.  
  5. //3.1.1 Breeze 创建函数

  6. //创建0矩阵和向量

  7. val m1 = DenseMatrix.zeros[Double](2,3)

  8. val v1 = DenseVector.zeros[Double](3)

  9. //创建元素都是1的向量

  10. val v2 = DenseVector.ones[Double](3)

  11. //创建指定元素的向量

  12. val v3 = DenseVector.fill(3)(5.0)

  13. //根据范围创建向量参数(start,end,step)

  14. val v4 = DenseVector.range(1,10,2)

  15. //创建对角线为1的矩阵

  16. val m2 = DenseMatrix.eye[Double](3)

  17. //创建指定对角线元素的矩阵

  18. val v6 = diag(DenseVector(1.0,2.0,3.0))

  19. //根据向量创建矩阵,每个数组就是一行

  20. val m3 = DenseMatrix((1.0,2.0),(3.0,4.0))

  21. //根据元素创建向量

  22. val v8 = DenseVector(1,2,3,4)

  23. //val v9 = v8.t

  24. //转置

  25. val v9 = DenseVector(1,2,3,4).t

  26. //根据下标创建向量和矩阵

  27. val v10 = DenseVector.tabulate(3){i=>2*i}

  28. val m4 = DenseMatrix.tabulate(3,2){case(i,j) =>i+j}

  29. //根据数组创建向量和矩阵

  30. val v11 = new DenseVector(Array(1,2,3,4))

  31. val m5 = new DenseMatrix(2,3,Array(11,12,12,21,21,11))

  32. //创建一个随机向量和矩阵

  33. val v12 = DenseVector.rand(4)

  34. val m6 = DenseMatrix.rand(2,3)

Breeze 元素访问

 
  1. //元素访问

  2. val a = DenseVector(1,2,3,4,5,6,7,8,9)

  3. //访问指定的元素

  4. a(0)

  5. //访问子元素,返回还是一个向量

  6. a(1 to 4)

  7. //指定起始和终止位置,和补偿

  8. a(5 to 1 by -1)

  9. //-1 代表最后的元素

  10. a(1 to -1)

  11. //访问最后元素

  12. a(-1)

  13.  
  14. val m = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))

  15. //访问指定的元素

  16. m(0,1)

  17. //访问某列的元素,返回一个向量

  18. m(::,1)

  19. //访问某一行

  20. m(1,::)

  21.  
  22. //元素操作

  23. val m_1 = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))

  24. //变成3行2列的矩阵

  25. m_1.reshape(3,2)

  26. //生成一个向量

  27. m_1.toDenseVector

  28.  
  29. val m_3 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))

  30. //取上三角和下三角

  31. lowerTriangular(m_3)

  32. upperTriangular(m_3)

  33. //copy生成一个新的矩阵

  34. m_3.copy

  35. //对角线生成一个向量

  36. diag(m_3)

  37. //改变矩阵里面的元素

  38. m_3(::,2) := 5

  39. m_3

  40. m_3(1 to 2,1 to 2) := 5

  41. m_3

  42.  
  43. //改变向量里面的元素

  44. val a_1 = DenseVector(1,2,3,4,5,6,7,8,9,10)

  45. a_1(1 to 4) := 5

  46. a_1

  47. a_1(1 to 4) := DenseVector(1,2,3,4)

  48. a_1

  49.  
  50. //矩阵的连接和向量的连接

  51. val a1 = DenseMatrix((1,2,3),(4,5,6))

  52. val a2 = DenseMatrix((1,1,1),(2,2,2))

  53. //竖直的连接

  54. DenseMatrix.vertcat(a1,a2)

  55. //水平连接

  56. DenseMatrix.horzcat(a1,a2)

  57. val b1 = DenseVector(1,2,3,4)

  58. val b2 = DenseVector(1,1,1,1)

  59. //水平连接

  60. DenseVector.vertcat(b1,b2)

  61. //两列的形式连接

  62. DenseVector.horzcat(b1,b2)

Breeze 数值计算函数

 
  1. val a_3 = DenseMatrix((1,2,3),(4,5,6))

  2. val b_3 = DenseMatrix((1,1,1),(2,2,2))

  3. //对应元素相操作

  4. a_3 + b_3

  5. a_3 :* b_3

  6. a_3 :/ b_3

  7. a_3 :< b_3

  8. a_3 :== b_3

  9. a_3 :+= 1

  10. a_3 :*= 2

  11. max(a_3)

  12. //最大值位置的索引

  13. argmax(a_3)

  14. //内积

  15. DenseVector(1,2,3,4) dot DenseVector(1,1,1,1)

Breeze 求和函数

 
  1. val a_4 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))

  2. sum(a_4)

  3. //每一列进行求和 12 15 18

  4. sum(a_4,Axis._0)

  5. //每一行进行求和 DenseVector(6, 15,24)

  6. sum(a_4,Axis._1)

  7. //对角线求和

  8. trace(a_4)

  9. //把前面的元素相加 DenseVector(1, 3, 6, 10)

  10. accumulate(DenseVector(1,2,3,4))

Breeze 布尔函数

 
  1. val a_5 = DenseVector(true,false,true)

  2. val b_5 = DenseVector(false,true,true)

  3. a_5 :& b_5

  4. a_5 :| b_5

  5. !a_5

  6. val a_5_2 = DenseVector(1,0,-2)

  7. //任意一个元素为0即为true

  8. any(a_5_2)

  9. //所有元素都为0则为true

  10. all(a_5_2)

Breeze 线性代数函数

 
  1. val a_6 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))

  2. val b_6 = DenseMatrix((1,1,1),(1,1,1),(1,1,1))

  3. a_6 \ b_6

  4. //转置

  5. a_6.t

  6. //特征值

  7. det(a_6)

  8. //逆

  9. inv(a_6)

  10. //矩阵分解(有问题)

  11. val svd.SVD(u,s,v) = svd(DenseMatrix(1.1,2.0),(2.0,3.0))

  12. a_6.rows

  13. a_6.cols

Breeze 取整函数

 
  1. val a_7 = DenseVector(1.2,0.6,-2.3)

  2. //四舍五入

  3. round(a_7)

  4. //往前进位

  5. ceil(a_7)

  6. //都舍去

  7. floor(a_7)

  8. //正的变为1.0 负的变为-1 0还是0

  9. signum(a_7)

  10. //绝对值

  11. abs(a_7)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值