机器学习:MATLAB语法

2022-09-19 10:42:11 浏览数 (1)

一、基本操作

1.1 变量

运算符:

代码语言:javascript复制
%           %表示注释
  - * /     %同其他语言,/是数学意义上的除法,非整除
^           %幂运算
==          %判断相等
~=          %判断不等
&&          %与运算
||          %或运算
xor(a,b)    %对 a,b 做异或运算

赋值语句:

代码语言:javascript复制
a = 3       %给变量 a 赋值 3,并打印变量a
a = 3;      %给变量 a 赋值 3,且不打印任何东西
a = 'hi'    %字符串赋值
a = pi      %将变量复制为圆周率

输出语句:

代码语言:javascript复制
a = pi;     % a 赋值为圆周率
a           % 输入一个 a 会打印 a 变量
disp(a)     % 打印变量a的值
disp(sprintf('%.2f',a)) %格式化字符串形式输出a,类似C的输出
format long  % 接下来以默认位数显示
format short % 接下来以简略形式显示

1.2 向量和矩阵

下面带 >> 的表示输入,不带的则表示命令行的输出。

赋值操作:

代码语言:javascript复制
>> A = [1 2;3 4;5 6] %矩阵赋值,分号表示换行
A = 
    1   2
    3   4
    5   6

>> A = [1 2; % 另外一种赋值方式
> 3 4;
> 3 6]
A = 
    1   2
    3   4
    5   6
>> v = [1,2,3]      % 建立行向量
>> v = [1;2;3]      % 建立列向量
>> v = 1:0.1:1.5    %建立一个行向量,从1开始,每次增加0.1(步长),直到1.5为止,步长缺省为1
v =
    1.0000    1.1000    1.2000    1.3000    1.4000    1.5000

新建矩阵:

代码语言:javascript复制
>> ones(2,3)

ans =

     1     1     1
     1     1     1
>> c = 2*ones(2,3) % 生成2行3列的全为1的矩阵

c =

     2     2     2
     2     2     2

>> w = zero(2,3)  % 同理ones函数,全为0
>> w = rand(2,3)  % 生成随机矩阵
>> w = randn(2,3) % 服从高斯分布的随机数,方差为1,均值为0

>> w = -6   sqrt(10) * (randn(3,4))

w =

  -11.2574   -5.2827    1.2595  -12.0307
    0.1465   -2.5249    2.7044   -7.1542
   -9.4301   -5.5345   -5.5626   -8.6820
>> I = eye(4)     %生成 4*4 的单位矩阵

I =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

可视化:

代码语言:javascript复制
>> hist(w)        %画出w的直方图,此时的w是一个高斯随机变量,服从正态分布(下左图)。
>> hist(w,50)     %直方图的竖条为50个(下右图)

二、移动数据

2.1 读取和存储数据

获取矩阵大小:

代码语言:javascript复制
>> A = [1 2;3 4; 5 6]
>> sz = size(A)  %返回矩阵A的大小

sz =

     3     2
>> size(A,1)     %返回矩阵A的第一维度大小
>> size(A,2)     %返回矩阵A的第二维度大小
>> length(A)     %返回最长维度的大小,一般对向量使用

系统相关函数及变量操作(类Linux):

代码语言:javascript复制
>> pwd      % 显示当前打开的文件夹路径

ans =

    'D:toolsMATLABbin'
>> cd C:Users86176Desktop % 改变打开的文件夹
>> pwd

ans =

    'C:Users86176Desktop'
>> ls       % 显示当前文件夹下的文件
>> who      % 显示当前存在的变量名

您的变量为:

A   B   I   X1  t1  t2  

>> whos     % 显示变量更加详细的信息

  Name      Size            Bytes  Class     Attributes

  A         3x2                48  double              
  B         1x6                48  double              
  I         4x4               128  double              
  X1        7x1                56  double              
  t1        9x2               144  double              
  t2        9x1                72  double      
>> clear t1   % 删除变量t1
>> clear      % 删除全部变量

文件读写和保存:

代码语言:javascript复制
load t1.txt %输入必须为 MAT 文件或包含每行列数相同的数值数据的 ASCII 文件。
>> t1  %打印文件t1中的数据,实际就是将其转变成了一个矩阵,矩阵的函数都可以用

t1 =

           1         123
           2         345
           3        4235
           4          23
           5        2435
           6         235
           7          23
           8         345
           9         435
>> Y = t1(1:2:5)            %类似python的切片操作,从第1个元素开始,每隔2个拿一个,直到第5个为止
>> save h1.mat Y;           %将 Y 保存为 h1.mat,.mat是一个压缩的二进制格式,对于大数据很有效
>> save h2.txt Y -ascii     %将Y以ascii保存

2.2 操作数据

代码语言:javascript复制
>> A = [1 2; 3 4; 5 6]

A =

     1     2
     3     4
     5     6
>> A(3,2)      %返回第3行第2列
>> A(2,:)      %返回第2行
>> A(:,2)      %返回第2列
>> A([1 3], :) % 返回第1行和第3行的整列

ans =

     1     2
     5     6
>> A(:,2) = [10;11;12]

A =

     1    10
     3    11
     5    12
>> A = [A,[111;222;333]]   %右侧增加新的一列

A =

     1    10   111
     3    11   222
     5    12   333

>>  A(:)      %将A中所有元素按照顺序放入一个列向量中

ans =

     1
     3
     5
    10
    11
    12
   111
   222
   333
>> B = [1 2 3; 4 5 6; 7 8 9];
>> C = [A B]     % 将A和B结合,A在左,B在右

C =

     1    10   111     1     2     3
     3    11   222     4     5     6
     5    12   333     7     8     9
>> C = [A;B]     % 将A和B结合,A在上,B在下

C =

     1    10   111
     3    11   222
     5    12   333
     1     2     3
     4     5     6
     7     8     9

三、计算数据

3.1 矩阵间运算

代码语言:javascript复制
>> A = [1 2; 3 4; 5 6];
>> B  =[11 12; 13 14;15 16];
>> C = [1 1; 2 2];

>> A * C     % 矩阵乘法
ans =

     5     5
    11    11
    17    17
>> A .* B   % 将两个矩阵对应元素相乘,其他运算符同理,要求维度一致

ans =

    11    24
    39    56
    75    96
>> A .^ 2  % 将矩阵每个元素平方,即'.' 表示对元素操作

ans =

     1     4
     9    16
    25    36
>> log(A)    % 求对数
>> exp(A)    % 以e为底求对数
>> abs(A)    %求绝对值
>>  -A       %取相反数
>> A   ones(size(A,1),size(A,2)) % 让矩阵每个元素都 1

3.2 矩阵内运算

3.2.1 数值运算

代码语言:javascript复制
>> prod(A)  % 求每列乘积
ans =
    15    48

>> sum(A,1)     % 求每列和
ans =
     9    12

>> sum(A,2)    % 求每行和
ans =
     3
     7
    11

3.2.2 逻辑运算

代码语言:javascript复制
>> a = [1 15 2 0.5];
>> max(a)    % 返回 a 中最大值
>> [val, ind] = max(a) % 返回a中最大值及其下标
val = 15
ind =  2

>> a < 3

ans =
  1×4 logical 数组
   1   0   1   1

>> find(a<3)
ans =
     1     3     4

>> [r,c] = find(A >= 5)    % 查找 >=5 的元素,返回坐标
r =
     3
     3
c =
     1
     2
>> max(A,[],1)  % 求每列最大值
ans =
     5     6

>> max(A,[],2)  % 求每行最大值
ans =
     2
     4
     6

3.3 矩阵特殊运算

代码语言:javascript复制
>> magic(4)    % 生成一个幻方矩阵

ans =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

>> A'        %A的转置     
>> pinv(A)   % 求矩阵的逆

ans =

   -1.3333   -0.3333    0.6667
    1.0833    0.3333   -0.4167

四、数据绘制

4.1 简单图形绘制

代码语言:javascript复制
>> t = 0:0.01:0.98
>> y1 = sin(2*pi*4*t);
>> plot(t,y1);          %绘制正弦函数(下图左)
>> hold on;             %保持已经绘制的图像,在此基础上继续绘制,不加这条则会重新绘制新的图形
>> y2 = cos(2*pi*4*t);

4.2 图像有关函数

代码语言:javascript复制
>> xlabel('time')
>> ylabel('value')
>> legend('sin','cos')
>> title('my plot')
>> print -dpng 'myplot.png'  %保存图片
>> close % 关闭图片
代码语言:javascript复制
>> figure(2);          % 指定接下来的图片在figure2窗格中生成,若不存在则新建一个窗格
>> subplot(2,3,4)      % 将当前窗格分成2行3列,在第4个格子里生成图片
>> axis([0.5 1 -1 1])  % 将当前图片的横坐标变成[0.5,1],纵坐标变成[-1,1]
>> clf;                % 清除当前窗格内的所有图片
代码语言:javascript复制
>> A = magic(5)

A =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

>> imagesc(A)   %生成一个颜色矩阵,一个颜色代表一种数字
>> imagesc(A), colorbar, colormap gary;  %生成颜色矩阵,加上颜色条,用灰度表示

五、控制语句

5.1 循环语句

for语句:

代码语言:javascript复制
>> for i = 1 : 10,
v(i) = 2 ^ i
end;

%等价于:
for (int i = 1; i <= 10; i  ) {
    v[i] = pow(2,i);
}

while语句:

代码语言:javascript复制
>> i = 1;
while i <= 5,
    v(i) = 100;
    i = i   1;
end;

%等价于
int i = 1;
while(i<=5) {
    v[i] = 100;
    i  ;
}

5.2 判断语句

代码语言:javascript复制
>>  if x > 6,
        x = x   10;
    elseif x > 10, 
        x = x - 10;
    end;

5.3 自定义函数

MATLAB中定义函数需要新建一个 ‘xxx.m’ 的文件,然后将函数的定义写在文件中,该文件要放在MATLAB打开的文件夹下,某函数定义如下,返回平方数。

代码语言:javascript复制
function y = squareThisNumber(x)  %定义返回值为 y ,自变量为 x

y = x^2;  %函数主体

还可以返回多值:

代码语言:javascript复制
function [y1,y2] = squareAndCubeThisNumber(x)

y1 = x^2;
y2 = x^3;

可以增加搜索路径:

代码语言:javascript复制
addpath('路径名')  %将函数所在路径添加到搜索路径中,及时当前位于别的文件夹下,也可以使用这个函数

六、向量化

比如要计算h_theta(x) = displaystylesum^{n}_{j= 0}theta_jx_j = theta^Tx ,可以选择自己写个循环计算,也可以转换成两个向量直接计算,这样代码会很简短同时更高效。

更复杂的向量化:

0 人点赞