MATLAB机器学习:利用显卡加速计算

1.GUI简介

1.1桌面

启动 MATLAB时,桌面会以默认布局显示。

matlab机器学习显卡 matlab用显卡计算_matlab

桌面包括下列面板:

  • 当前文件夹 - 访问您的文件。
  • 命令行窗口 - 在命令行中输入命令(由提示符 (>>) 表示)。
  • 工作区 - 浏览您创建或从文件导入的数据。
    工作区包含在 MATLAB中创建或从数据文件或其他程序导入的变量。例如,下列语句在工作区中创建变量 A 和 B。
A = magic(4);
B = rand(3,5,2);

桌面上的“工作区”窗格也会显示变量。

matlab机器学习显卡 matlab用显卡计算_MATLAB_02

  • 退出 MATLAB后,工作区变量不会保留。使用 save 命令保存数据以供将来使用,
  • save myfile.mat
  • 通过保存,系统会使用 .mat 扩展名将工作区保存在当前工作文件夹中一个名为 MAT 文件的压缩文件中。
  • 要清除工作区中的所有变量,请使用 clear 命令。
  • 使用 load 将 MAT 文件中的数据还原到工作区。
  • load myfile.mat

1.2脚本编辑器

通过工具栏或菜单的“新建脚本(New Script)”或“打开(Open)”,可以打开脚本编辑器。

matlab机器学习显卡 matlab用显卡计算_MATLAB_03

在脚本编辑器中,通过工具栏或菜单中的“运行(Run)按钮”,可以运行当前打开的脚本。

比如在脚本编辑器中输入下面的代码并且运行:

a = 1;
b = 2;
c = a + b;

在桌面中观察运行的结果。
将上面的代码中c = a + b后面的分号去掉后运行,再在桌面中观察运行的结果。

使用百分比 (%) 符号添加注释。
按键Ctrl+R,将会使当前选择的行变为注释;
按键Ctrl+T,将会使当前选择的行取消注释;

1.3查询帮助

在脚本编辑器中,点击右上角的“帮助按钮”,可以打开帮助浏览器进行浏览或搜索。
在脚本编辑器中,选中一个函数后按键F1,可以显示此函数的说明。

2.矩阵和数组

所有 MATLAB变量都是多维数组,与数据类型无关。矩阵是指通常用来进行线性代数运算的二维数组。

2.1数组创建

要创建每行包含四个元素的数组,请使用逗号 (,) 或空格分隔各元素。

a = [1 2 3 4]

运行结果:
a = 1×4
1 2 3 4

这种数组为行向量。
要创建包含多行的矩阵,请使用分号分隔各行。

a = [1 2 3; 4 5 6; 7 8 10]

运行结果:
a = 3×3
1 2 3
4 5 6
7 8 10

创建矩阵的另一种方法是使用 ones、zeros 或 rand 等函数。例如,创建一个由零组成的 5×1 列向量。

z = zeros(5,1)

运行结果:
z = 5×1
0
0
0
0
0

2.2矩阵和数组运算

MATLAB允许您使用单一算术运算符函数来处理矩阵中的所有值

a + 10

运行结果:
ans = 3×3
11 12 13
14 15 16
17 18 20

sin(a)

运行结果:
ans = 3×3
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 -0.5440

要转置矩阵,请使用单引号 (’):

a'

运行结果:
ans = 3×3
1 4 7
2 5 8
3 6 10

您可以使用 * 运算符执行标准矩阵乘法,这将计算行与列之间的内积。例如,矩阵a乘以其逆矩阵可返回单位矩阵:

p = a*inv(a)

运行结果:
p = 3×3
1.0000 0 0
0.0000 1.0000 0
0.0000 -0.0000 1.0000

请注意,p 不是整数值矩阵。MATLAB将数字存储为浮点值,算术运算可以区分实际值与其浮点表示之间的细微差别。使用 format 命令可以显示更多小数位数:

format long
p = a*inv(a)

运行结果:
p = 3×3
1.000000000000000 0 0
0.000000000000002 1.000000000000000 0
0.000000000000002 -0.000000000000004 1.000000000000000

使用以下命令将显示内容重置为更短格式
format short
format 仅影响数字显示,而不影响 MATLAB对数字的计算或保存方式。

要执行元素级乘法(而非矩阵乘法),请使用 .* 运算符:

p = a.*a

运行结果:
p = 3×3
1 4 9
16 25 36
49 64 100

乘法、除法和幂的矩阵运算符分别具有执行元素级运算的对应数组运算符。例如,计算 a 的各个元素的三次方:

a.^3

运行结果:
ans = 3×3
1 8 27
64 125 216
343 512 1000

2.3串联

串联是连接数组以便形成更大数组的过程。实际上,第一个数组是通过将其各个元素串联起来而构成的。成对的方括号 [] 即为串联运算符。

A = [a,a]

运行结果:
A = 3×6
1 2 3 1 2 3
4 5 6 4 5 6
7 8 10 7 8 10

使用逗号将彼此相邻的数组串联起来称为水平串联。每个数组必须具有相同的行数。同样,如果各数组具有相同的列数,则可以使用分号垂直串联。

A = [a; a]

运行结果:
A = 6×3
1 2 3
4 5 6
7 8 10
1 2 3
4 5 6
7 8 10

2.4数组索引

MATLAB中的每个变量都是一个可包含许多数字的数组。如果要访问数组的选定元素,请使用索引。
以 4×4 幻方矩阵 A 为例:

A = magic(4)

运行结果:
A = 4×4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

引用数组中的特定元素有两种方法。最常见的方法是指定行和列下标,例如

A(4,2)

运行结果:
ans = 14
另一种方法不太常用,但有时非常有用,即使用单一下标按顺序向下遍历每一列

A(8)

运行结果:
ans = 14
使用单一下标引用数组中特定元素的方法称为线性索引
如果尝试在赋值语句右侧引用数组外部元素,MATLAB会引发错误。

test = A(4,5)

运行结果:
Index exceeds matrix dimensions.
不过,您可以在赋值语句左侧指定当前维外部的元素。数组大小会增大以便容纳新元素。

A(4,5) = 17

运行结果:
A = 4×5
16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 17

引用多个数组元素,请使用冒号运算符,这使您可以指定一个格式为 start:end 的范围。例如,列出 A 前三行及第二列中的元素:

A(1:3,2)

运行结果:
ans = 3×1
2
11
7

单独的冒号(没有起始值或结束值)指定该维中的所有元素。例如,选择 A 第三行中的所有列:

A(3,:)

运行结果:
ans = 1×5
9 7 6 12 0

此外,冒号运算符还允许您使用较通用的格式 start:step:end 创建等距向量值

B = 0:10:100

运行结果:
B = 1×11
0 10 20 30 40 50 60 70 80 90 100

如果省略中间的步骤(如 start:end 中),MATLAB会使用默认步长值 1

2.5数组类型

2.5.1多维数组

MATLAB环境中的多维数组是具有多个下标的数组。创建多维数组的一种方法是调用具有多个参数的 zeros、ones、rand。例如,

R = rand (3,4,5);

创建一个 3×4×5 数组,共包含 345 = 60 个随机元素。
在下面的示例中,第 k 个或第 tk 个矩阵的第 (i, j) 个元素由 A(i,j,k) 表示。

2.5.2元胞数组

MATLAB中的元胞数组是以其他数组的副本为元素的多维数组。使用 cell 函数可以创建空矩阵的元胞数组。但是,更普遍的做法是,通过将其他内容的集合括入花括号 {} 中来创建元胞数组。例如,

a = cell(3,4)
b = {'abcdef' [1 2 3 4] 123 'x'}

检索某个元胞的内容,请在花括号中使用下标。例如,

b{1}

2.5.3字符与文本

使用单引号在 MATLAB中输入文本。例如,

s = 'Hello'

其结果与您目前已学过的数值矩阵或数组不属于同一类型,而是一个 1×5 字符数组。
字符在内部作为数字存储,而不会采用浮点格式存储。语句

a = double(s)

将字符数组转换为数值矩阵,该矩阵包含每个字符的 ASCII 代码的浮点表示。结果为
a =
72 101 108 108 111
语句

s = char(a)

是刚才转换的逆转换。

2.5.4结构体struct

结构体是多维 MATLAB数组,包含可按文本字段标志符访问的元素。例如,

S.name = 'Ed Plum';
S.score = 83;
S.grade = 'B+'

创建一个具有三个字段的标量结构体。

3.表达式

3.1变量

MATLAB不需要任何类型声明或维度说明。当 MATLAB遇到新的变量名称时,它会自动创建变量,并分配适当大小的存储。如果此变量已存在,MATLAB会更改其内容,并根据需要分配新存储。例如,

num_students = 25

创建一个名为 num_students 的 1×1 矩阵,并将值 25 存储在该矩阵的单一元素中。

3.2矩阵运算符

表达式使用大家熟悉的算术运算符和优先法则。


运算符含义
+加法
-减法
/除法
*乘法
\左除
^
复共轭转置

3.3数组运算符

如果矩阵不用于线性代数运算,则成为二维数值数组。数组的算术运算按元素执行。这意味着,加法和减法运算对数组和矩阵都是相同的,但乘法运算不相同。MATLAB的乘法数组运算表示法中包含点,也就是小数点。
运算符列表包括:


运算符含义
+加法
-减法
./逐元素除法
.*逐元素乘法
.\逐元素左除
.^逐元素幂

例如使用数组乘法将矩阵自乘

A.*A

4.循环及条件语句

使用关键字控制流和分支,如 if、for 和 while
Matlab语言语法:


语句含义
if, elseif, else条件为 true 时执行语句
for用来重复指定次数的 for 循环
while条件为true时执行的while循环
break终止执行for或while循环
continue将控制权传递给 for 或 while 循环的下一迭代
end终止代码块或指示最大数组索引
return将控制权返回给调用函数

4.1 if, elseif, else

条件为 true 时执行语句
语法
if expression
statements
elseif expression
statements
else
statements
end
说明
elseif 和 else 模块是可选的。这些语句仅在 if…end 块中前面的表达式为 false 时才会执行。if 块可以包含多个 elseif 块。
示例:

%创建一个由 1 组成的矩阵。
nrows = 4;
ncols = 6;
A = ones(nrows,ncols);


%遍历矩阵并为每个元素指定一个新值。对主对角线赋值 2,对相邻对角线赋值 -1,对其他位置赋值 0。
for c = 1:ncols
    for r = 1:nrows
        if r == c
            A(r,c) = 2;
        elseif abs(r-c) == 1
            A(r,c) = -1;
        else
            A(r,c) = 0;
        end
    end
end

A
运行结果:
A = 4×6
2 -1 0 0 0 0
-1 2 -1 0 0 0
0 -1 2 -1 0 0
0 0 -1 2 -1 0

4.2 for

用来重复指定次数的 for 循环
语法
for index = values
statements
end
说明
在循环中将一组语句执行特定次数。values 通常为下列形式之一:

  • initVal:endVal - index 变量从 initVal 至 endVal 按 1 递增,重复执行 statements 直到 index 大于 endVal。
  • initVal:step:endVal - 每次迭代时按值 step 对 index 进行递增,或在 step 是负数时对 index 进行递减。
    示例:
%显示1~10之间的所有奇数
for i=1:2:10
    i
end

4.3 while

条件为 true 时重复执行的 while 循环
语法
while expression
statements
end
说明
计算一个表达式,并在该表达式为 true 时在一个循环中重复执行一组语句。
示例:

%使用 while 循环计算阶乘 factorial(10)。
n = 10;
f = n;
while n > 1
    n = n-1;
    f = f*n;
end
disp(['n! = ' num2str(f)])

5.函数

5.1概述

两种程序文件:

  • 脚本,不接受输入参数或返回输出参数。它们处理工作区中的数据。
  • 函数,可接受输入参数,并返回输出参数。内部变量是函数的局部变量。

5.2脚本

脚本是最简单的一种 MATLAB程序。脚本是一个包含多行连续的 MATLAB命令和函数调用的文件。在命令行中键入脚本名称即可运行该脚本。

5.3函数

%创建一个函数文件myadd.m。函数名必须与文件名相同。
下面列出了此文件:
function c = myadd(a,b)
c = a + b;
    end
    
    

函数的第一行以关键字 function 开头。它提供函数名称和参数顺序。本示例中具有两个输入参数和一个输出参数。
可以采用多种不同方法使用 myadd 函数:

myadd(1, 2)
c = myadd(2, 3)

6.图像

6.1读取和写入图像

使用 imread 函数可以读取标准图像文件(TIFF、JPEG、PNG 等)。imread 返回的数据类型取决于读取的图像类型。
使用 imwrite 函数可以将 MATLAB数据写入到各种标准图像格式。

mImg = imread('C:\\xxxxxxxxxxxxxxx\\a0.bmp');
mImg = rgb2gray(mImg);

6.2显示图像

使用 imshow 函数

figure;
imshow(mImg);

6.3转换为灰度图

mImg = rgb2gray(mImg);

6.4类型转换

%从0-255的无符号8位整数转换为0-1的双精度数:
mImg = im2double(mImg);
%实现图像矩阵的归一化操作。使矩阵的每个元素的值都在0和1之间。
mImg = mat2gray(mImg);

7.数值类型

整数浮点数据
MATLAB中的数值类包括有符号无符号整数单精度双精度浮点数默认情况下,MATLAB以双精度浮点形式存储所有数值。(不能更改默认类型和精度。)可以选择以整数或单精度形式存储任何数值或数值数组。与双精度数组相比,以整数和单精度数组形式存储数据更节省内存。
所有数值类型都支持基本的数组运算,例如添加下标、重构和数学运算。


数值类型含义
double双精度数组
single单精度数组
int88位有符号整数数组
int1616位有符号整数数组
int3232位有符号整数数组
int6464位有符号整数数组
uint88位无符号整数数组
uint1616位无符号整数数组
uint3232位无符号整数数组
uint6464位无符号整数数组


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空