sparkmllib矩阵向量
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矩阵向量的更多相关文章
- 基于MPI的并行计算—矩阵向量乘
以前没接触过MPI编程,对并行计算也没什么了解.朋友的期末课程作业让我帮忙写一写,哎,实现结果很一般啊.最终也没完整完成任务,惭愧惭愧. 问题大概是利用MPI完成矩阵和向量相乘.输入:Am×n,Bn× ...
- 快速电路仿真器(FastSPICE)中的高性能矩阵向量运算实现
今年10-11月份参加了EDA2020(第二届)集成电路EDA设计精英挑战赛,通过了初赛,并参加了总决赛,最后拿了一个三等奖,虽然成绩不是很好,但是想把自己做的分享一下,我所做的题目是概伦电子出的F题 ...
- Spark MLlib之使用Breeze操作矩阵向量
在使用Breeze 库时,需要导入相关包: import breeze.linalg._ import breeze.numerics._ Breeze创建函数 //全0矩阵 DenseMatrix. ...
- opengl矩阵向量
如何创建一个物体.着色.加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣.我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动,但这太繁琐了,而且会消耗很多的处理 ...
- opencv矩阵总结
OpenCV 矩阵操作 CvMat 转自:http://hi.baidu.com/xiaoduo170/blog/item/10fe5e3f0fd252e455e72380.html 每回用矩阵都要查 ...
- OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...
- “玲珑杯”ACM比赛 Round #12 (D) 【矩阵快速幂的时间优化】
//首先,感谢Q巨 题目链接 定义状态向量b[6] b[0]:三面临红色的蓝色三角形个数 b[1]:两面临红色且一面临空的蓝色三角形个数 b[2]:一面临红色且两面临空的蓝色三角形个数 b[3]:三面 ...
- Eigen矩阵基本运算
1 矩阵基本运算简介 Eigen重载了+,-,*运算符.同时提供了一些方法如dot(),cross()等.对于矩阵类的运算符重载只支持线性运算,比如matrix1*matrix2是矩阵相乘,当然必须要 ...
- HDU 5434 Peace small elephant 状压dp+矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant Accepts: 38 Submissions: ...
随机推荐
- Tomcat6和Tomcat7配置SSL通信的比较
<Tomcat6和Tomcat7配置SSL通信的比较> 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 在项目开发过程中,尝尝会遇到Tomc ...
- c++ 如何编写接口类(interface)
接口类简介: 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法. 用c++实现接口类时需要 ...
- 遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析
开发的机器,系统情况如下: 1.server 2003 sp2 x86 2.补丁安装360 3.升级到IE8 因为担心server 2003 sp2 不能够自动update,最近都是用360打补丁,比 ...
- 如何在CentOS 7.2上创建NFS的Share,然后让Client可以访问
讲得详细清楚明白的好文. Setting Up an NFS Server and Client on CentOS 7.2 https://www.howtoforge.com/tutorial/s ...
- JQuery Ajax 在asp.net中使用总结
自从有了JQuery,Ajax的使用变的越来越方便了,但是使用中还是会或多或少的出现一些让人短时间内痛苦的问题.本文暂时总结一些在使用JQuery Ajax中应该注意的问题,如有不恰当或者不完善的地方 ...
- Validate Binary Search Tree leetcode java
题目: Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is define ...
- 【Spark】Spark-foreachRDD需要注意的问题
Spark-foreachRDD需要注意的问题 dstream.foreachRDD_百度搜索 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中 - 吾心光明 ...
- Windows xcopy
1.考虑下面的需求,把aaa目录下面的111.txt 拷贝到 bbb,如下:echo onxcopy .\aaa\111.txt .\bbb\ /ypause2.注意这里表示路径要用右斜杠,因为左斜杠 ...
- iPhone8发布后那些搞笑Geek段子合辑 #精选搞笑GEEK段子
这些段子能把人笑出猪叫声哈哈哈哈哈哈哈哈哈哈哈哈嗝 前方高能!请带好安全帽观看段子手们的表演 只能帮你们到这里了 加了半截刘海,怎么像和天猫合作的了? 杜蕾斯的追热点也很及时啊!十年如一日是啥意思 ...
- Android 高级 Jackson Marshalling(serialize)/Unmarshalling(deserialize)
本文内容 高级 Jackson Marshalling 只序列化符合自定义标准的字段 把 Enums 序列化成 JSON 对象 JsonMappingException(没有找到类的序列化器) Jac ...