专栏首页祥子的故事spark | scala | 线性代数库Breeze学习

spark | scala | 线性代数库Breeze学习

最近在学习spark,对线性代数库Breeze做了学习,介绍下常用的函数

前提,使用Breeze库,必须导入相关的包

import breeze.linalg._
import breeze.numerics._

最基础的操作:矩阵,向量,数组的转换

1、DenseMatrix.zerosDouble

全为零的n*m的矩阵,Double类型

2、DenseVector.zerosDouble

全为零的n个数组成的向量,Double类型

3、DenseVector.onesDouble

全为1的n个数组成的向量,Double类型

4、DenseVector.fill(n){5.0}

产生向量,长度为n,用5.0来填充

5、DenseVector.range(start,stop,step) DenseVector.rangeD(start,stop,step)

产生序列向量 6、DenseVector.linspace(start,stop,numvals)

产生向量,有numvals个数的向量

7、DenseMatrix.eyeDouble

产生n*n的矩阵,对角为1,Double类型

8、diag(DenseVector(1.0,2.0,3.0))

产生主对角元素为1.0,2.0,3.0的矩阵

9、DenseMatrix((1.0,2.0),(3.0,4.0))

产生矩阵

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

产生向量

11、DenseVector(1,2,3,4).t

向量转置

12、DenseVector.tabulate(3){i => 2*i}

scala> DenseVector.tabulate(3){i => 2*i}

res33: breeze.linalg.DenseVector[Int] = DenseVector(0, 2, 4)

结果为:0,2,4

13、DenseMatrix.tabulate(3,2){case(i,j) => i+j}

scala> DenseMatrix.tabulate(3,2){case(i,j) => i+j}
res34: breeze.linalg.DenseMatrix[Int] =
0  1
1  2
2  3

行列数相加

14、new DenseVector(Array(1,2,3,4)) 从数组创建向量

scala> new DenseVector(Array(1,2,3,4))
res35: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4)

15、new DenseMatrix(2,3,Array(11,12,13,21,22,23)) 从数组创建矩阵

scala> new DenseMatrix(2,3,Array(11,12,13,21,22,23))
res36: breeze.linalg.DenseMatrix[Int] =
11  13  22
12  21  23

16、DenseVector.rand(4) 得到0到1的随机向量,长度为4

scala> DenseVector.rand(4)
res37: breeze.linalg.DenseVector[Double] = DenseVector(0.9838289972536518, 0.798555117073358, 0.30308183931925403, 0.7958095551517774)

17、DenseMatrix.rand(2,3) 得到0到1的随机矩阵

scala> DenseMatrix.rand(2,3)
res38: breeze.linalg.DenseMatrix[Double] =
0.3891370890132193  0.06732600444704517  0.2136759825764527
0.587145241786718   0.8670050354290917   0.5494899108312414

Breeze元素访问

1、指定位置

scala> val a = DenseVector(1,2,3,4,5)
a: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4, 5)

scala> a(2)
res44: Int = 3

2、向量子集

scala> a(1 to 2)
res40: breeze.linalg.DenseVector[Int] = DenseVector(2, 3)

scala> a(1 until 2)
res41: breeze.linalg.DenseVector[Int] = DenseVector(2)

scala> a.slice(1,2)
res42: breeze.linalg.DenseVector[Int] = DenseVector(2)

3、按照指定步长取子集

scala> a(3 to 1 by -1)
res45: breeze.linalg.DenseVector[Int] = DenseVector(4, 3, 2)

4、指定开始位置至结尾

scala> a(2 to -1 )
res48: breeze.linalg.DenseVector[Int] = DenseVector(3, 4, 5)

5、最后一个元素

scala> a(2 to -1 )
res48: breeze.linalg.DenseVector[Int] = DenseVector(3, 4, 5)

6、矩阵指定列

scala> val a = DenseMatrix((1,2,3,4,5),(3,4,5,6,7),(5,6,7,8,9))
a: breeze.linalg.DenseMatrix[Int] =
1  2  3  4  5
3  4  5  6  7
5  6  7  8  9

scala> a(::,2)
res1: breeze.linalg.DenseVector[Int] = DenseVector(3, 5, 7)

Breeze元素操作

1、a.reshape(3,2) 调整矩阵形状

scala> val a = DenseMatrix((2,3),(3,4),(6,7))
a: breeze.linalg.DenseMatrix[Int] =
2  3
3  4
6  7


scala> val a = DenseMatrix((2,3),(3,4),(6,7))
a: breeze.linalg.DenseMatrix[Int] =
2  3
3  4
6  7

2、a.toDenseVector 矩阵转成向量

scala> val a = DenseMatrix((2,3),(3,4),(6,7))
a: breeze.linalg.DenseMatrix[Int] =
2  3
3  4
6  7

scala> a.toDenseVector
res3: breeze.linalg.DenseVector[Int] = DenseVector(2, 3, 6, 3, 4, 7)

3、lowerTriangular 下三角矩阵

scala> val b = DenseMatrix((1,2,3,4,5,6),(2,3,4,5,6,7),(3,4,5,6,7,8))
b: breeze.linalg.DenseMatrix[Int] =
1  2  3  4  5  6
2  3  4  5  6  7
3  4  5  6  7  8

scala> lowerTriangular(b)
res7: breeze.linalg.DenseMatrix[Int] =
1  0  0
2  3  0
3  4  5

4、upperTriangular 上三角矩阵

scala> upperTriangular(b)
res8: breeze.linalg.DenseMatrix[Int] =
1  2  3
0  3  4
0  0  5

5、b.copy 复制矩阵

scala> b.copy
res9: breeze.linalg.DenseMatrix[Int] =
1  2  3  4  5  6
2  3  4  5  6  7
3  4  5  6  7  8

6、diag(a) 取对角线元素

scala> val c = DenseMatrix((1,2,3),(2,3,4),(3,4,5))
c: breeze.linalg.DenseMatrix[Int] =
1  2  3
2  3  4
3  4  5

scala> diag(c)
res12: breeze.linalg.DenseVector[Int] = DenseVector(1, 3, 5)

7、c(1 to 4 ) := 5.0 子集赋值,将c中的第2个数到第五个数赋值为5.0

scala> val d = DenseVector(1,2,3,4,5,6,7,8,8)
d: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4, 5, 6, 7, 8, 8)

scala> d(1 to 4) :=  5
res18: breeze.linalg.DenseVector[Int] = DenseVector(5, 5, 5, 5)

scala> d
res21: breeze.linalg.DenseVector[Int] = DenseVector(1, 5, 5, 5, 5, 6, 7, 8, 8)

8、d(1 to 4) := DenseVector(1,2,3) 子集赋向量

scala> d(1 to 4):=DenseVector(1,2,3,4)
res26: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3, 4)

scala> d
res27: breeze.linalg.DenseVector[Int] = DenseVector(1, 1, 2, 3, 4, 6, 7, 8, 8)

9、a(1 to 3,1 to 3) :=5 矩阵赋值

scala> b(1 to 2,1 to 3):= 6
res30: breeze.linalg.DenseMatrix[Int] =
6  6  6
6  6  6

scala> b
res31: breeze.linalg.DenseMatrix[Int] =
1  2  3  4  5  6
2  6  6  6  6  7
3  6  6  6  7  8

10、a(::,2) := 5 矩阵列赋值

scala> b(::,2) := 7
res32: breeze.linalg.DenseVector[Int] = DenseVector(7, 7, 7)

scala> b
res33: breeze.linalg.DenseMatrix[Int] =
1  2  7  4  5  6
2  6  7  6  6  7
3  6  7  6  7  8

11、DenseMatrix.vertcat(a,b) 垂直合并

12、DenseMatrix.horzcat(d,e) 水平合并

13、DenseVector.vertvat(a,b) 向量连接

数值计算

求和函数

布尔函数

线性代数

一些很基础的函数,很实用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言:读取excel的perl问题

    弄了好久还是没有解决,尴尬啊,我是写了读excel这个博文,现在竟然报错,无地自容了。

    努力在北京混出人样
  • 第五章:数字

    num.real 实部 num.imag 虚部 num.conjugate() 共轭复数

    努力在北京混出人样
  • R语言:PPS抽样

    百度百科: PPS 抽样是指按概率比例抽样,属于概率抽样中的一种。是指在多阶段抽样中,尤其是二阶段抽样中,初级抽样单位被抽中的机率取决于其初级抽样单位的规...

    努力在北京混出人样
  • 接口返回图片二进制流前端展示

    咋一看,不是base64格式,二十二进制的图片流数据,前端要想展示,只需要转换数据格式为base64即可。

    用户1141560
  • Scalaz(18)- Monad: ReaderWriterState-可以是一种简单的编程语言

      说道FP,我们马上会联想到Monad。我们说过Monad的代表函数flatMap可以把两个运算F[A],F[B]连续起来,这样就可以从程序的意义上形成一种串...

    用户1150956
  • TCP的局限性有哪些?

    爬蜥
  • .NET Core采用的全新配置系统[7]: 将配置保存在数据库中

    我们在《聊聊默认支持的各种配置源》和《深入了解三种针对文件(JSON、XML与INI)的配置源》对配置模型中默认提供的各种ConfigurationSource...

    蒋金楠
  • 在Oracle中,分布式事务ORA-01591错误如何解决?

    这个错误是由于分布式事务引起,而不是普通的锁引起的。若检查一般对象数据表锁定,则只需要检查V$LOCKED_OBJECT和V$TRANSACTION视图,就可以...

    小麦苗DBA宝典
  • cocos2dx 钢琴

    #include "PianoScene.h" #include "SimpleAudioEngine.h" USING_NS_CC; Scene* Pia...

    _gongluck
  • NYOJ 19 擅长排列的小明(dfs递归)

    这道题和组合数那道题我觉得差不多,两道题可以一起写一下,对比一下,能更好的理解递归思想。

    Ch_Zaqdt

扫码关注云+社区

领取腾讯云代金券