目录
前言:
MatLab 与 Python 对比:
MatLab:数值计算、微分方程求解、仿真等
Python:爬虫、数据挖掘、机器学习、深度学习等
入门:
基础知识点:
知识点 | 说明 |
---|---|
Ctrl键 + N | 创建(普通)脚本文件(后缀:.m) |
% Ctrl键 + R Ctrl键 + T |
注释 添加注释 取消注释 |
实时脚本文件(后缀:.mlx) Ctrl键 + E Ctrl键 + Alt +Enter Ctrl键 + Enter |
文件特点:代码与文本分离;可插入图片与公式;运行结果实时显现;交互式文档 切换文本与代码 分节符 运行当前节代码 |
; | 对应代码运行结果在命令行窗口不显示(也可以起到分隔语句的作用) |
数据文件 | 后缀:.mat |
常用命令行:
命令 | 作用 |
---|---|
clc | 清空命令行窗口 |
clear clear 变量名 |
清空工作区 删除指定变量 |
format long g | 长固定小数点格式 |
上/下键 | 查找历史命令 |
doc 命令名称 | 查看官方文档 |
特殊变量:
变量名称 | 描述 |
---|---|
ans | 默认用于保存运算结果 |
pi | 圆周率 |
inf / -inf | 无穷大[^1] / 负无穷大 |
NaN | 缺失值或未定值 |
i / j | 复数单位 |
eps | 浮点相对精度(大小约为 2.22e-16,近似为零) |
数学运算函数:
函数名 | 作用 |
---|---|
abs | 绝对值或复数求模 |
floor | 向下取整 |
ceil | 向上取整 |
fix | 保留整数 |
round round(x,n) |
四舍五入取整 保留 n 位小数(若 n 为负数,则反向取零[^2]) |
mod(x,y) | 取余 |
sqrt(a) | 开平方根(若 a 为负数,结果为复数) |
exp(x) | ex |
log(x) | lg x |
log2 / log10 | 计算以2 / 10为底的对数[^3] |
sin / cos / tan sind / cosd / tand asin / acos / atan |
三角函数(以弧度为单位) 三角函数(以角度为单位) 反三角函数(以弧度为单位) |
向量:
创建:
1.直接创建法
将数据用 "[ ]" 括入,数据之间以空格、逗号(行向量)或者分号、回车(列向量)分隔
2.冒号法
A : step : B
A为起始值,step为步长,B为终止边界[^4]
3.函数创建法(linspace / logspace)
linspace(a,b):创建元素总数为100,以a为起点,b为终点的等差数列行向量(若 a>b,步长为负数)
linspace(a,b,n):创建元素总数为n,以a为起点,b为终点的等差数列行向量
logspace(a,b):创建元素总数为50,以10^a^ 为起点,10^b^ 为终点的等比数列行向量
logspace(a,b,n):创建元素总数为n,以10^a^ 为起点,10^b^ 为终点的等比数列行向量
索引:
length(a) / numel(a):返回向量维度
MatLab中,元素的索引从"1" 开始,最大索引即为向量维度
a = [2 3 5 6 8 1 0]
单元素提取:
a(index)
多元素提取(将index设置为向量,存放需访问索引):
index = [1 2 3 4]
a(index)
或者a([1 2 3 4])
或者a(1:1:4)
MatLab支持元素重复提取:
a([1 2 2 2])
end索引:指向向量末元素的索引
a(3:end)
注意:使用end之后,不可以将其赋值给变量(如下代码)
index = 3:end
修改与删除:
a(1) = 2
a([1 2]) = [8 9] (注意左右两侧向量长度需相等)
a(1:3) = [7 8 9]
a[1:3] = 100 (若右侧为常数,则表示将左侧指定元素全赋值为该常数)
a(1) = [] (删除指定元素)
a(end-3:end) (删除指定区域元素)
矩阵:
创建:
1.直接输入法
将数据用 "[ ]" 括入,同行数据之间以空格、逗号分隔,行与行之间以分号、回车分隔
2.函数创建法
zeros(n) 创建 n 阶零矩阵
zeros(m,n) 创建 mxn 阶零矩阵
ones 的用法与 zeros 类似;用于创建元素均为"1"的矩阵
eye(n) 创建 n 阶单位矩阵
% 根据线性代数的知识可知,单位矩阵必须为方阵
% 但在MatLab中,可以使用 eye 函数来创建类似于单位矩阵的 "mxn 阶单位矩阵"
% eye(2,3)
% [1 0 0
% 0 1 0]
rand(n) n 阶矩阵
rand(m,n) mxn 阶矩阵
数据来源:[0,1]随机、均匀分布取样
randi([min,max],n) n 阶矩阵
randi([min,max],m,n) mxn 阶矩阵
randi(max,m,n) min == 1
数据来源:[min,max]随机、均匀分布取样(整数)
randn(n) n 阶矩阵
randn(m,n) mxn 阶矩阵
数据来源:(0,1)随机、标准正态分布取样
% 标准正态分布:以0为均值、1为标准差的正态分布
创建对角矩阵(首参数为向量):
diag([1 2 3])
[1 0 0
0 2 0
0 0 3]
diag([1 2 3],-1)
[0 0 0 0
1 0 0 0
0 2 0 0
0 0 3 0]
diag([1 2 3],2)
[0 0 1 0 0
0 0 0 2 0
0 0 0 0 3
0 0 0 0 0
0 0 0 0 0]
获取对角线元素(首参数为方阵):
A =
[6 0 1 0 9
3 0 0 2 0
0 0 8 0 3
0 0 5 0 0
0 0 1 9 0]
diag(A) == [6 0 8 0 0]
diag(A,-1) == [3 0 5 9]
diag(A,2) == [1 2 3]
-------------------------------------------------------------------------------------------------------------------
创建分块对角矩阵:
A1 = [1 2 3
3 4 5]
A2 = [4 5 6 7
0 1 2 4
2 3 4 0]
A3 = [0 1
0 9
8 1]
blkdiag(A1,A2,A3) ==
[1 2 3 0 0 0 0 0 0
3 4 5 0 0 0 0 0 0
0 0 0 4 5 6 7 0 0
0 0 0 0 1 2 4 0 0
0 0 0 2 3 4 0 0 0
0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 9
0 0 0 0 0 0 0 8 1]
3.文件导入法
MatLab 支持读取本地文件:
.txt 、.dat 、.csv (适用于带分隔符的文本文件)
.xls 、.xlsb 、.xlsm 、.xlsx 、.xltm 、.xltx 、.ods (适用于电子表格文件)
行列索引:
A =
[6 0 1 0 9
3 0 0 2 0
0 0 8 0 3
0 0 5 0 0
0 0 1 9 0]
单元素索引:
A(row_index,col_index)
多元素索引:
A([1 3],[1 2 6]) 提取1,3行、1,2,6列元素
A(1:2:end,1:2:end) 提取奇数行、奇数列元素
% 简写:起始"1"与终止"end"可以省略
A(:,n) 提取矩阵中第n列元素
A(m,:) 提取矩阵中第m行元素
A([2 3],:) 提取矩阵中第2,3行元素
A(2:2:end,:) 提取矩阵中偶数行元素
A(1:2:end,3:3:end) 提取矩阵中奇数行、3的倍数列元素
size(A) 即返回[A_row,A_col]
size(A,1) 即返回A_row
size(A,2) 即返回A_col
返回值可以直接使用向量来接收,也可以使用两个常数接收
vector = size(A)
[A_r,A_c] = size(A)
length(A) 即返回max(A_row,A_col)
numel(A) 即返回元素总数
线性索引:
MatLab 中数据的存储方式为 "列线性"
A =
[6 0 1 0 9
3 0 0 2 0
0 0 8 0 3
0 0 5 0 0
0 0 1 9 0]
A(7) == A(2,2)
A(6:9) == A([1 2 3 4],2)
A(:) 表示将A中所有元素按照线性索引顺序重构成列向量
A(1:end) 表示将A中所有元素按照线性索引顺序重构成行向量
% 线性索引与行列索引转换
index = sub2ind([A_row,A_col],row,col) 输入矩阵大小,求解行列、数,返回相应线性索引
[row,col] = ind2sub([A_row,A_col],index) 输入矩阵大小,求解线性索引,返回相应行列、数
修改与删除:
% 行列索引
A(2,3) = 10
A(1,:) = 100
A([2 3],[3 4]) = [8 8;8 8] 2x2矩阵大小需匹配
% 线性索引
A(3) = 5
A(1:end) = 0
A(2:4) = [8 8 8]
% 若修改索引越界矩阵,此时并不会报错, MatLab会将空缺位置以"0"补充
A =
[2 3 1
1 7 8]
A(3,4) = 7
A ==
[2 3 1 0
1 7 8 0
0 0 0 7]
% 利用行列索引进行矩阵删除操作只能整行或整列
A =
[2 3 1 0
1 7 8 0
0 0 0 7]
A(:,1) = []
A(:,[2,end]) = []
% 利用线性索引进行矩阵删除操作无需对整行或整列操作,不过其返回结果为剩余元素按照线性索引排列的行向量
A =
[2 3 1 0
1 7 8 0
0 0 0 7]
A(1:4) = []
A == [7 0 1 8 0 0 0 7]
拼接与重复:
% 横向拼接
C = [A B]
C = horzcat(A,B)
C = cat(dim,A,B) //dim == 2
% 纵向拼接
C = [A
B]
C = vertcat(A,B)
C = cat(dim,A,B) //dim == 1
标签:index,end,元素,矩阵,笔记,学习,索引,MatLab,col
From: https://www.cnblogs.com/code-yiyi/p/18329752