RDD、矩阵基础——3. 矩阵、向量(Breeze、BLAS)

article/2025/9/17 23:49:32

MLlib库底层的Vector(向量)、Matrix(矩阵)运算使用了

Breeze库和BLAS库。

Breeze库提供了相应计算的接口(Linalg)。

但是在MLlib里面同时也提供了Vector和Linalg等的实现。

BLAS(线性代数运算库)广泛应用于高性能计算领域。

 

 

一、Breeze库

 

导入:

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

 

 

1. Breeze创建矩阵、向量

操作名称

Breeze函数

输出结果

对应Numpy函数

全0矩阵

DenseMatrix.zeros[Double](2,3)

0.0 0.0 0.0

0.0 0.0 0.0

zeros((2,3))

全0向量

DenseVector.zeros[Double](3)

DenseVector(0.0,0.0,0.0)

zeros(3)

全1向量

DenseVector.ones[Double](3)

DenseVector(1.0,1.0,1.0)

ones(3)

按数值填充向量

DenseVector.fill(3){5.0}

DenseVector(5.0,5.0,5.0)

ones(3)*5.0

生成随机向量

DenseVector.range(start,stop,step), 或Vector.rangeD(start,end,step)

 

 

线性等分向量(用于产生start, stop之间的N点行向量)

DenseVector.linspace(start,stop,numvals)

 

 

单位矩阵

DenseMatr.eye[Double](3)

1.0 0.0 0.0

0.0 1.0 0.0

0.0 0.0 1.0

eye(3)

对角矩阵

diag(DenseVector(1.0,2.0,3.0))

1.0 0.0 0.0

0.0 2.0 0.0

0.0 0.0 3.0

diag((1.0,2.0,3.0))

按照行创建矩阵

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

1.0 2.0

3.0 4.0

array([[1.0,2.0],[3.0,4.0]])

按照行创建向量

DenseVector(1,2,3,4)

[1 2 3 4]

array([1,2,3,4])

向量转置

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

[1 2 3 4]T

array([1 2 3 4]).reshape(-1,1)

从函数创建向量

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

[0 1 4]

 

从函数创建矩阵

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

0 1

1 2

2 3

 

从数组创建向量

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

[1 2 3 4]

 

从数组创建矩阵

new DenseMatrix(2,3,array(11,12,13,21.22,23))

11 12 13

21 22 23

 

0到1的随机向量

DenseVector.rand(4)

[0.0222 0.2231 0.5356 0.6902]

 

0到1的随机矩阵

DenseMatrix.rand(2,3)

0.2122 0.3033 0.8675

0.6628 0.0023 0.9987

 

实例:

val v1 = DenseVector(1.0,2.0,3.0)

val v2 = DenseVector(Array(1,2,3,4))

val v3 = DenseVector.rand(4)

 

val m1 = DenseMatrix((1.0,2.0),(3.0,4.0))

m1.t

val m2 = new DenseMatrix(2, 3, Array(1,2,3,4,5,6))

val m3 = DenseMatrix.rand(2,3)

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

 

 

2. Breeze取数据及数据操作

2.1 Breeze取数据

操作名称

Breeze函数

对应Numpy函数

指定位置

a(0,1)

a[0,1]

向量子集

a(1 to 4), a(1 until 5), a.slice(1,5)

a[1:5]

按照指定步长取子集

a(5 to 0 by -1)

a[5:0:-1]

指定开始位置至结尾

a(1 to -1)

a[1:]

最后一个元素

a(-1)

a[-1]

矩阵指定列

a(::, 2)

a[:,2]

 实例:

 

 

2.2 Breeze数据操作

操作名称

Breeze函数

对应Numpy函数

调整矩阵形状

a.reshape(3,2)

a.reshape(3,2)

矩阵转成向量

a.toDenseVector(Makes copy)

a.flatten()

复制下三角

lowerTriangular(a)

tril(a)

复制上三角

upperTriangular(a)

triu(a)

矩阵复制

a.copy

np.copy(a)

取对角线元素

diag(a)

diagonal(a)

子集赋数值

a(1 to 4) := 5.0

a[1:4]=5.0

子集赋向量

a(1 to 4) := DenseVector(1.0,2.0,3.0)

a[1:4]=[1.0 2.0 3.0]

矩阵赋值

a(1 to 3, 1 to 3) := 5.0

a[2:4, 2:4] = 5.0

矩阵列赋值

a(::, 2) := 5.0

a(:,3) = 5

垂直连接矩阵

DenseMatrix.vertcat(a,b)

[a;b]

横向连接矩阵

DenseMatrix.horzcat(a,b)

[a,b]

向量连接

DenseVector.vertcat(a,b)

[a b]

 实例:

 

 

 

 

3. Breeze数值计算函数

操作名称

Breeze函数

对应Numpy函数

元素加法

a + b

a + b

元素乘法

a :* b

a * b

元素除法

a :/ b

a / b

元素比较

a :< b

a < b

元素相等

a :== b

a == b

元素追加

a :+= 1.0

a += 1

元素追乘

a :*= 2.0

a *= 2

向量点积

a dot b, a.t * bT

dot(a,b)

元素最大值

max(a)

a.max()

元素最大值及位置

argmax(a)

a.argmax()

实例:

 

 

 

4. Breeze求和函数

操作名称

Breeze函数

对应Numpy函数

元素求和

sum(a)

a.sum()

每一列求和

sum(a, Axis._0),

或sum(a(::,*))

sum(a,0)

每一行求和

sum(a,Axis._1),

或sum(a(*, ::))

sum(a,1)

对角线元素和

trace(a)

a.trace()

累积和

accumulate(a)

a.cumsum()

实例:

 

 

5. Breeze布尔函数

操作名称

Breeze函数

对应Numpy函数

元素与操作

a :& b

a & b

元素或操作

a :| b

a | b

元素非操作

!a

~a

任意元素非零

any(a)

any(a)

所有元素非零

all(a)

all(a)

针对布尔类型的,不常用

 

 

6. Breeze线性代数函数

操作名称

Breeze函数

对应Numpy函数

线性求解

a \ b

linalg.solve(a,b)

转置

a.t

a.conj.transpose()

求特征值

det(a)

linalg.det(a)

求逆

inv(a)

linalg.inv(a)

求伪逆

pinv(a)

linalg.pinv(a)

求范数

norm(a)

norm(a)

特征值和特征向量

eigSym(a)

linalg.eig(a)[0]

特征值

val(er,ei,_) = eig(a)(实部与虚部分开)

lialg.eig(a)[0]

特征向量

eig(a)._3

 

奇异值分解

val svd.SVD(u,s,v) = svd(a)

linalg.svd(a)

求矩阵的秩

rank(a)

rank(a)

矩阵长度

a.length

a.size

矩阵行数

a.rows

a.shape[0]

矩阵列数

a.cols

a.shape[1]

实例:

 

 

 

7. Breeze取整函数

操作名称

Breeze函数

对应Numpy函数

四舍五入

round(a)

around(a)

小于的最小整数

ceil(a)

ceil(a)

大于的最大整数

floor(a)

floor(a)

符号函数

(1.0为正,-1.0为负)

signum(a)

sign(a)

取正数

abs(a)

abs(a)

实例:

 

8. Breeze其他函数

常量函数、复数函数、三角函数、对数和指数函数等不常用。

(详见SPARK MLLIB机器学习)

 

 

 

 

 

二、BLAS库

BLAS(线性代数运算库)广泛应用于高性能计算领域。

BLAS按照功能可以分为3类:

Level 1:向量-向量运算

如:点积(ddot)、加法和数乘(daxpy)、绝对值的和(dasum)等

Level 2:矩阵-向量运算

主要函数是矩阵和向量的乘法(dgemv)

Level 3:矩阵-矩阵运算

主要函数是矩阵的乘法(dgemm)

 

每种运算都区分不同的数据类型(单精度、多精度、复数、双精度复数),

如矩阵乘法分为:sgemm(单精度)、dsymm(多精度)、zhemm(双精度复数)。

之所以分这么多种,是针对不同类型的矩阵都设计专门的算法,是的计算性能最优。

BLAS基本函数

函数

名称

点积

dot

常数乘以向量加

另一个向量

axpy

准备Givens旋转

rotg

实施旋转

rot

准备修改过的

Givens旋转

rotmg

实施修改过的

Givens旋转

gotm

复制x到y

copy

交换x和y

swap

2-范数

(欧几里得长度)

nrm2

绝对值求和

asum

常数乘以向量

scal

最大绝对值元素

的索引

amax

其他

 

以单精度类型函数为例,以下为BLAS的基本函数。

 

 

1. BLAS向量-向量运算

SROTG

Givens旋转设置

SROTMG

改进Givens旋转设置

SROT

Givens旋转

SROTM

改进Givens旋转

SSWAP

交换x和y

SSCAL

常数a乘以向量x()

SCOPY

把x复制到y

SAXPY

向量y+常数a乘以向量x(y = a*x + y)

SDOT

点积

SDSDOT

扩展精度累积的点积

SNRM2

欧氏范数

SCNRM2

欧氏范数

SASUM

绝对值之和

ISAMAX

最大值位置

 

2. BLAS矩阵-向量运算

SGEMV

矩阵向量乘法

SGBMV

带状矩阵向量乘法

SSYMV

对称矩阵向量乘法

SSBMV

对称带状矩阵向量乘法

SSPMV

对称填充矩阵向量乘法

STRMV

三角矩阵向量乘法

STBMV

三角带状矩阵向量乘法

STPMV

三角填充矩阵向量乘法

STRSV

求解三角矩阵

STBSV

求解三角带状矩阵

STPSV

求解三角填充矩阵

SGER

A := alpha*x*y’ + A

SSYR

A := alpha*x*x’ + A

SSPR

A := alpha*x*x’ + A

SSYR2

A := alpha*x*y’ + alpha*y*x’ + A

SSPR2

A := alpha*x*y’ + alpha*y*x’ + A

 

 

3. BLAS矩阵-矩阵运算

SGEMM

矩阵乘法

SSYMM

对称矩阵乘法

SSYPK

对称矩阵的秩-k修正

SSYR2K

对称矩阵的秩-2k修正

STRMM

三角矩阵乘法

STRSM

多重右端的三角线性方程组求解

 

向量与向量

加:+    减:-   点乘:  :*   点除::/    向量乘法: *  向量除法: /

矩阵与矩阵

加:+    减:-   点乘:  :*   点除::/     矩阵乘法: *  矩阵除法: /

矩阵或向量与数值

加:+   减:-    乘:*    除:/  

矩阵和向量

加:+    减:-   点乘:  :*   点除::/     矩阵乘法: *  矩阵除法: /

Matrix(*, ::)+Vector 逐行

Matrix(::, *)+Vector 逐列

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/T7AChVri.shtml

相关文章

WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.

&#xff08;WARNING : Using NumPy C-API based implementation for BLAS functions&#xff09;的解决方案 情况说明问题的解决第一步&#xff1a;使用CMD安装类库第二步&#xff1a;在用户目录下放置一个文件 验证 情况说明 再训练生成对抗网络GAN时&#xff0c;需要Pylear…

BLAS之GEMM和GEMV

BLAS简介 BLAS全称是Basic Linear Algebra Subprograms是规定了一套低级的执行常见线性代数操作的规范。其实现经常针对特殊的机器进行优化&#xff0c;比较著名的BLAS库有ACML, ATLAS, MKL, OpenBLAS。许多常见的数值软件均采用兼容BLAS规范的实现库来进行线性代数计算&#…

linux编译blas,科学网—Linux下安装blas和lapack包小记 - 徐博伦的博文

系统是centOS6.5&#xff0c;机器上已有gfortran编译器 从网上搜索下载blas、cblas、lapack的tar压缩文件包 1.编译blas 先解压文件 tar xvf blas.tgz cd blas #blas的解压文件夹 gfortran -c -O3 *.f #编译生成.o执行文件 ar rv libblas.a *.o #链接所有的 .o文件&#xff0…

BLAS学习

导师突然通知要开始关于blas的讨论班&#xff0c;之前甚至都没听说过blas这个词&#xff0c;又要开始新一波的锤炼小白之路了… 1. BLAS简介 首先BLAS的全称是 Basic Linear Algebra Subprograms&#xff0c;即 基础线性代数子程序库&#xff0c;其中包含了一系列基本的线性代…

android 您的手机上未安装应用程序的解决方法

android 创建桌面快捷方式的时候设置应用名称和图标是完全没有问题&#xff0c;但是点击快捷方式的时候出现“您的手机上未安装应用程序“&#xff0c;这是快捷方式的执行目标设置错误&#xff0c;也就是启动Activity。有些应用的启动Activity是欢迎界面&#xff0c;创建快捷方…

android显示应用程序未安装,如何解决安卓系统显示应用程序未安装

我们在安装软件的时候经常会遇到应用程序未安装这个问题&#xff0c;尤其是在更新软件或者是从ROM提取出来的软件会出现这样的问题。那我们该如何处理这个问题呢&#xff1f;下面我就为大家列举几个解决这种问题的办法。 产生应用程序未安装的原因 软件签名不一致。这种情况一般…

什么是android应用程序未安装,应用程序未安装,教您安卓系统应用程序未安装怎么解决...

大家在使用智能手机的时候&#xff0c;尤其是安卓系统的手机&#xff0c;在安装应用程序&#xff0c;也就是App的时候&#xff0c;有时会提示“应用程序未安装”&#xff0c;相信很多使用安卓机器的朋友都曾遇到过“应用程序未安装”的问题&#xff0c;但是懂得解决的用户并不多…

android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题

android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题 参考&#xff1a; 安装apk时出现INSTALL_FAILED_NO_MATCHING_ABIS&#xff1f;Android 开发之 INSTALL_FAILED 汇集表 问题说明 在为安卓模拟器中android 11版本的系统安装一些常用软…

一加5应用未安装怎么解决_应用程序未安装怎么解决 手机提示应用程序未安装解决办法...

安卓手机系统的应用繁多&#xff0c;丰富人们使用体验的同时&#xff0c;有时候还会出现种种问题&#xff0c;比如安装提示“应用程序未安装”&#xff0c;那么&#xff0c;遇见这个问题应该怎么处理呢&#xff1f;请阅读本文教程&#xff01; 手机提示应用程序未安装解决办法 …

android开发下载安装app提示未安装应用

出现的情况是通过usb可以安装&#xff0c;然后用androidStudio运行生成的apk,发送出去&#xff0c;下载安装&#xff0c;提示未安装应用: 问题如图: 解决过程:在百度上看一些方案,不一致呢,问了问别人,通过正确的打包方式打包试一下,尝试过在AndroidStudio通过Build,然后Build…

什么是android应用程序未安装,显示“应用程序未安装”是怎么回事?程序未安装的解决图文步骤...

安卓手机安装应用的时候&#xff0c;有时候会莫名其妙无法安装……明明存储空间够的啊摔!经过搜索和尝试&#xff0c;本人找到一种可行的方法&#xff0c;下面分享给大家。目前看来&#xff0c;这是部分系统内的bug&#xff0c;下面&#xff0c;小编跟大家介绍安卓系统应用程序…

Andorid手机安装apk文件,提示应用未安装

项目场景&#xff1a;Andorid手机安装apk文件&#xff0c;提示应用未安装 通过Andorid studio打包生成的apk文件&#xff0c;在Andorid手机上安装时&#xff0c;提示应用未安装 安装apk文件到手机上&#xff0c;提示“应用未安装” 原因分析&#xff1a; 可能是手机上的Andor…

安装APK时提示“应用未安装”

情况说明&#xff1a;最近在做公司的移动端项目&#xff0c;作为新手碰到许多问题&#xff0c;不过也算是在披荆斩棘般前行。本来今天星期一高高兴兴来上班&#xff0c;结果测试姐姐跑过来说应用程序安装不上&#xff0c;忙活了一上午也没什么结果&#xff0c;最后还是靠公司前…

应用未安装

安卓删除软件之后安装失败 我在使用uniapp开发玩一个软件之后&#xff0c;打包&#xff0c;由于安卓之前是有一个旧的版本的&#xff0c;于是我把旧的版本删除之后&#xff0c;再去安装新的包&#xff0c;就会一直报错。 如图所示 出现这种原因是因为我在删除的时候&#xff…

手机apk应用程序未安装解决办法

用智能手机很多都会遇到“X应用程序未安装”这种情况&#xff0c;这是为什么呢&#xff1f;1、软件未卸载干净&#xff0c;比如是我以前手机装过手机淘宝&#xff0c;非正常卸载后再装可能就提示X应用程序未安装&#xff1b;2、下载的安装包不完整&#xff0c;也会导致X应用程序…

89C51单片机中的中断系统

89C51单片机中的中断系统 对于在单片机中的学习&#xff0c;中断系统是一难点&#xff0c;如果中断系统没有理解透彻&#xff0c;51单片机的学习就算是失败的。 首先&#xff0c;举例说明下什么是中断。 eg.当你在家正在吃着爆米花&#xff0c;看着电视&#xff0c;突然门铃响…

AT89C51单片机交通灯仿真图+代码

接上篇万年历&#xff0c;这篇博客也是记录我的实训内容&#xff0c;我们实训有万年历和交通灯。好了不说闲话&#xff0c;上正文。 不知道为何突然发现说原创审核不过&#xff0c;完全手写的&#xff0c;也不知道为何&#xff0c;哭 注&#xff1a;在评论有附本人交通灯的图噢…

基于AT89C51单片机的电子万年历PROTEUS仿真设计

目录 前 言 1 第一章 工作原理 2 1.1设计目标 2 1.1.1基本功能 2 第二章 硬件设计与原理 3 2.1 总设计框图 3 2.2 硬件设计分析 3 2.2.1 电源的设计 3 2.2.2 单片机最小系统 4 2.2.3 显示系统 10 2.2.4 LCD1602的指令说明及时序 12 2.2.5 LCD1602的RAM地址映射及标准字库表 14 …

基于at89c51单片机的交通灯控制设计

** 单片机自主学习项目*设计分析 —模拟LED交通灯 ** 一、开发背景与需求 1 开发背景 交通事业蓬勃发展&#xff0c;交通流量年年增长&#xff0c;道路交通繁忙&#xff0c;经常有严重堵车现象&#xff0c;特别是在交叉口&#xff0c;为了在叉口的各条干道实现合理的科学分…

以梦为马之89c51单片机驱动lcd

路有千万条&#xff0c;我要选择那条最难的走&#xff0c;这才是我该走的路 控制LCD实际上就是控制两个牛屎芯片 观察lcd1602&#xff0c;它有16个引脚&#xff0c;其含义如下图所示 查看数据手册看到如下时序图 再看说明书看到时序图介绍&#xff1a; 芯片手册混合写的&a…