Spark MLlib底层的向量、矩阵运算使用了Breeze库,Breeze库提供了Vector/Matrix的实现以及相应计算的接口(Linalg)。但是在MLlib里面同时也提供了Vector和Linalg等的实现。 
使用需导入:

import breeze.linalg._
import breeze.numerics._
  • 1
  • 2

Breeze创建函数

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

DenseMatrix[Double] = 
0.0 0.0 0.0 
0.0 0.0 0.0

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

DenseVector(0.0, 0.0, 0.0)

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

DenseVector(1.0, 1.0, 1.0)

val v3 = DenseVector.fill(3){5.0}
  • 1

DenseVector(5.0, 5.0, 5.0)

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

DenseVector(1, 3, 5, 7, 9)

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

DenseMatrix[Double] = 
1.0 0.0 0.0 
0.0 1.0 0.0 
0.0 0.0 1.0

val v6 = diag(DenseVector(1.0,2.0,3.0))
  • 1

DenseMatrix[Double] = 
1.0 0.0 0.0 
0.0 2.0 0.0 
0.0 0.0 3.0

val v8 = DenseVector(1,2,3,4)
  • 1

DenseVector(1, 2, 3, 4)

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

Transpose(DenseVector(1, 2, 3, 4))

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

DenseVector(0, 2, 4)

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

DenseMatrix[Int] = 
0 1 
1 2 
2 3

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

DenseVector(1, 2, 3, 4)

val m5 = new DenseMatrix(2, 3, Array(11, 12, 13, 21, 22, 23))
  • 1

DenseMatrix[Int] = 
11 13 22 
12 21 23

val v12 = DenseVector.rand(4)
  • 1

DenseVector(0.7517657487447951, 0.8171495400874123, 0.8923542318540489, 0.174311259949119)

val m6 = DenseMatrix.rand(2, 3)
  • 1

DenseMatrix[Double] = 
0.5349430131148125 0.8822136832272578 0.7946323804433382 
0.41097756311601086 0.3181490074596882 0.34195102205697414

Breeze元素访问

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

DenseVector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

a(1 to 4)
  • 1

DenseVector(2, 3, 4, 5)

a(5 to 0 by -1)
  • 1

DenseVector(6, 5, 4, 3, 2, 1)

a(1 to -1)
  • 1

DenseVector(2, 3, 4, 5, 6, 7, 8, 9, 10)

a( -1 )
  • 1

Int = 10

val m = DenseMatrix((1.0,2.0,3.0), (3.0,4.0,5.0))
  • 1

DenseMatrix[Double] = 
1.0 2.0 3.0 
3.0 4.0 5.0

m(0,1)
  • 1

Double = 2.0

m(::,1)
  • 1

DenseVector(2.0, 4.0)

Breeze元素操作

val m = DenseMatrix((1.0,2.0,3.0), (3.0,4.0,5.0))
  • 1

DenseMatrix[Double] = 
1.0 2.0 3.0 
3.0 4.0 5.0

m.reshape(3, 2) //从列开始计数
  • 1

DenseMatrix[Double] = 
1.0 4.0 
3.0 3.0 
2.0 5.0

m.toDenseVector
  • 1

DenseVector(1.0, 3.0, 2.0, 4.0, 3.0, 5.0)

val m = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
  • 1

DenseMatrix[Double] = 
1.0 2.0 3.0 
4.0 5.0 6.0 
7.0 8.0 9.0

lowerTriangular(m)
  • 1

DenseMatrix[Double] = 
1.0 0.0 0.0 
4.0 5.0 0.0 
7.0 8.0 9.0

upperTriangular(m)
  • 1

DenseMatrix[Double] = 
1.0 2.0 3.0 
0.0 5.0 6.0 
0.0 0.0 9.0

m.copy
  • 1

linalg.DenseMatrix[Double] = 
1.0 2.0 3.0 
4.0 5.0 6.0 
7.0 8.0 9.0

diag(m)
  • 1

DenseVector(1.0, 5.0, 9.0)

m(::, 2) := 5.0
  • 1

DenseVector(5.0, 5.0, 5.0)

m
  • 1

DenseMatrix[Double] = 
1.0 2.0 5.0 
4.0 5.0 5.0 
7.0 8.0 5.0

m(1 to 2,1 to 2) := 5.0
  • 1

DenseMatrix[Double] = 
5.0 5.0 
5.0 5.0

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

DenseVector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

a(1 to 4) := 5
  • 1

DenseVector(5, 5, 5, 5)

a(1 to 4) := DenseVector(1,2,3,4)
  • 1

DenseVector(1, 2, 3, 4)

val a1 = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0))
val a2 = DenseMatrix((1.0,1.0,1.0), (2.0,2.0,2.0))
DenseMatrix.vertcat(a1,a2)
  • 1
  • 2
  • 3

DenseMatrix[Double] = 
1.0 2.0 3.0 
4.0 5.0 6.0 
1.0 1.0 1.0 
2.0 2.0 2.0

DenseMatrix.horzcat(a1,a2)
  • 1

DenseMatrix[Double] = 
1.0 2.0 3.0 1.0 1.0 1.0 
4.0 5.0 6.0 2.0 2.0 2.0

val b1 = DenseVector(1,2,3,4)
val b2 = DenseVector(1,1,1,1)
DenseVector.vertcat(b1,b2)
  • 1
  • 2
  • 3

DenseVector(1, 2, 3, 4, 1, 1, 1, 1)

Breeze数值计算函数

val a = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0))
val b = DenseMatrix((1.0,1.0,1.0), (2.0,2.0,2.0))
a + b
  • 1
  • 2
  • 3

DenseMatrix[Double] = 
2.0 3.0 4.0 
6.0 7.0 8.0

a :* b
  • 1

DenseMatrix[Double] = 
1.0 2.0 3.0 
8.0 10.0 12.0

a :/ b
  • 1

DenseMatrix[Double] = 
1.0 2.0 3.0 
2.0 2.5 3.0

a :< b
  • 1

DenseMatrix[Boolean] = 
false false false 
false false false

a :== b
  • 1

DenseMatrix[Boolean] = 
true false false 
false false false

a :+= 1.0
  • 1

DenseMatrix[Double] = 
2.0 3.0 4.0 
5.0 6.0 7.0

a :*= 2.0
  • 1

DenseMatrix[Double] = 
4.0 6.0 8.0 
10.0 12.0 14.0

max(a)
  • 1

Double = 14.0

argmax(a)
  • 1

(Int, Int) = (1,2)

DenseVector(1, 2, 3, 4) dot DenseVector(1, 1, 1, 1)//点积
  • 1

Int = 10

Breeze求和函数

val a = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
sum(a)
  • 1
  • 2
  • 3

Double = 45.0

sum(a, Axis._0)//每列求和
  • 1

DenseMatrix[Double] = 12.0 15.0 18.0

sum(a, Axis._1)//按行求和
trace(a) //对角线求和 15
  • 1
  • 2
accumulate(DenseVector(1, 2, 3, 4)) //累计和 1+2 、1+2+3
  • 1

DenseVector(1, 3, 6, 10)

Breeze布尔函数

val a = DenseVector(true, false, true)
val b = DenseVector(false, true, true)
a :& b
a :| b
!a
  • 1
  • 2
  • 3
  • 4
  • 5

DenseVector(false, false, true)

val a = DenseVector(1.0, 0.0, -2.0)
any(a) //任一元素非0,true
all(a) //所有元素非0,false
  • 1
  • 2
  • 3

Breeze线性代数函数

a \ b //线性求解
a.t //转置
det(a) //求特征值
inv(a) //求逆
pinv(a) //求伪逆
norm(a) //求范数
eigSym(a)//特征值和特征向量
val (er, ei, _) = eig(a) (实部与虚部分开) //特征值
eig(a)._3//特征向量
val svd.SVD(u,s,v) = svd(a)//奇异值分解
rank(a)//求矩阵的秩
a.length//矩阵长度
a.rows//矩阵行数
a.cols//矩阵列数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
DenseMatrix((1.0,1.0,1.0), (1.0,1.0,1.0) , (1.0,1.0,1.0))
a \ b
a.t
  • 1
  • 2
  • 3
  • 4

DenseMatrix[Double] = 
1.0 4.0 7.0 
2.0 5.0 8.0 
3.0 6.0 9.0

Breeze取整函数

round(a)//四舍五入
ceil(a)
floor(a)
signum(a)//符号函数
abs(a)
  • 1
  • 2
  • 3
  • 4
  • 5
val a = DenseVector(1.2, 0.6, -2.3)
signum(a)
  • 1
  • 2

DenseVector(1.0, 1.0, -1.0)

Breeze其它函数

Breeze三角函数包括:

sin, sinh, asin, asinh
cos, cosh, acos, acosh
tan, tanh, atan, atanh
atan2
sinc(x) ,即sin(x)/x
sincpi(x) ,即 sinc(x * Pi)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Breeze对数和指数函数 
Breeze对数和指数函数包括:

log, exp log10
log1p, expm1
sqrt, sbrt
pow
  • 1
  • 2
  • 3
  • 4

BLAS介绍(一个线性代数库)

BLAS按照功能被分为三个级别: 
Level 1:矢量-矢量运算,比如点积(ddot),加法和数乘 (daxpy), 绝对值的和(dasum),等等; 
Level 2:矩阵-矢量运算,最重要的函数是一般的矩阵向量乘法(dgemv); 
Level 3:矩阵-矩阵运算,最重要的函数是一般的矩阵乘法 (dgemm); 
每一种函数操作都区分不同数据类型(单精度、双精度、复数) 
 
 

sparkmllib矩阵向量的更多相关文章

  1. 基于MPI的并行计算—矩阵向量乘

    以前没接触过MPI编程,对并行计算也没什么了解.朋友的期末课程作业让我帮忙写一写,哎,实现结果很一般啊.最终也没完整完成任务,惭愧惭愧. 问题大概是利用MPI完成矩阵和向量相乘.输入:Am×n,Bn× ...

  2. 快速电路仿真器(FastSPICE)中的高性能矩阵向量运算实现

    今年10-11月份参加了EDA2020(第二届)集成电路EDA设计精英挑战赛,通过了初赛,并参加了总决赛,最后拿了一个三等奖,虽然成绩不是很好,但是想把自己做的分享一下,我所做的题目是概伦电子出的F题 ...

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

    在使用Breeze 库时,需要导入相关包: import breeze.linalg._ import breeze.numerics._ Breeze创建函数 //全0矩阵 DenseMatrix. ...

  4. opengl矩阵向量

    如何创建一个物体.着色.加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣.我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动,但这太繁琐了,而且会消耗很多的处理 ...

  5. opencv矩阵总结

    OpenCV 矩阵操作 CvMat 转自:http://hi.baidu.com/xiaoduo170/blog/item/10fe5e3f0fd252e455e72380.html 每回用矩阵都要查 ...

  6. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...

  7. “玲珑杯”ACM比赛 Round #12 (D) 【矩阵快速幂的时间优化】

    //首先,感谢Q巨 题目链接 定义状态向量b[6] b[0]:三面临红色的蓝色三角形个数 b[1]:两面临红色且一面临空的蓝色三角形个数 b[2]:一面临红色且两面临空的蓝色三角形个数 b[3]:三面 ...

  8. Eigen矩阵基本运算

    1 矩阵基本运算简介 Eigen重载了+,-,*运算符.同时提供了一些方法如dot(),cross()等.对于矩阵类的运算符重载只支持线性运算,比如matrix1*matrix2是矩阵相乘,当然必须要 ...

  9. HDU 5434 Peace small elephant 状压dp+矩阵快速幂

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant  Accepts: 38  Submissions: ...

随机推荐

  1. shell单引号与变量、双引号与变量、如何在多重引号里面取到shell变量的值?

    如何在多重引号里面取到shell变量的值? 双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不动的输出,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里 ...

  2. Reloading Java Classes 201: How do ClassLoader leaks happen? Translation

    The original link : http://zeroturnaround.com/rebellabs/rjc201/ From ClassLoaders to Classes 从ClassL ...

  3. 解决Web部署 svg/woff/woff2字体 404错误 iis 解决Web部署 svg/woff/woff2字体 404错误

    问题:最近在IIS上部署web项目的时候,发现浏览器总是报找不到woff.woff2字体的错误.导致浏览器加载字体报404错误,白白消耗了100-200毫秒的加载时间. 原因:因为服务器IIS不认SV ...

  4. Kyoto Cabinet 使用及原理

    Kyoto Cabinet 基本规格书 如果你知道 Tokyo Cabinet ,那么就应该知道 Kyoto Cabinet,因为他们都是同一个作者(平林幹雄)开发出来的 Key-Value 数据库. ...

  5. java问题排查命令

    java问题排查命令 jps:查看java进程 jmap:导出堆详细信息(与jhat一起使用) jhat:分析Java堆的命令(与jmap一起使用) jstack:可以定位到线程堆栈,根据堆栈信息我们 ...

  6. DLL文件实现窗体的模板模式

    机房合作版中第一次使用了模板方法,实现了类似窗体的界面和代码的复用..窗体继承有两种方法,一种是通过继承选择器从已编译的程序集合里选择,另一种则是通过DLL文件的方式继承.个人觉得DLL还是比较方便的 ...

  7. 客户端连接SQL报"Cannot Generate SSPI Context"错误

    这种错误实在是让人头痛, 如果你遇到它还没有头痛的话, 请先看看微软给出的针对这个错误的这篇KB811889. 一般我遇到这种错误都是直接放弃, 重新运行sysprep之后再安装一遍所需要的软件. 然 ...

  8. 说说最易被忽略的CSS强制性换行

    一般情况下,元素拥有默认的white-space:normal(自动换行,PS:不换行是white-space:nowrap),当录入的文字超过定义的宽度后会自动换行,但当录入的数据是一堆没有空格的字 ...

  9. 大数据开发实战:Hive表DDL和DML

    1.Hive 表 DDL 1.1.创建表 Hive中创建表的完整语法如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS]  table_name [ (col_nam ...

  10. Openstack中为虚拟机使用CDROM光驱设备

    在Libvirt里处理 在nova里处理 实际效果 怎么卸载 在Libvirt里处理 尝试了下面有几种方法,为虚拟机载入光盘文件: 1.使用ide方式挂载: virsh attach-disk {in ...