标准数组生成
zero(M, N)
生成一个大小是MN的double类矩阵,其元素均为0ones(M, N)
生成一个大小是MN的double类矩阵,其元素均为1ture(M, N)
生成一个大小是MN的logical类矩阵,其元素均为1false(M, N)
生成一个大小是MN的logical类矩阵,其元素均为0magic(M)
生成一个大小均为MN的“魔方矩阵”,在该矩阵中,每一行的元素之和、每一列的元素之和以及主对角线中的元素之和均相等,易于生成,元素均为整数rand(M, N)
生成一个大小是MN的矩阵,其元素都是在区间[0,1]中均匀分布的随机数randn(M, N)
生成一个大小是M*N的矩阵,其元素是正态分布的随机数,随机数均值为0,方差为1
数组和矩阵算术运算符
图像是等价于矩阵的二维数组,因此以下所有运算符均适用于图像.*
表示数组乘法,times(A, B)
这种乘法的乘积是与A和B大小相同的数组,其每个元素都是A和B中相应元素的乘积*
表示传统意义的矩阵乘法mtimes(A, B)
./
数组右除rdivide()A, B
.\
数组左除ldivide(A, B)
/
矩阵右除mrdivide(A, B)
\
矩阵左除mldivide(A, B)
.^
数组求幂power(A, B)
^
矩阵求幂mpower(A, B)
.'
向量和均值转置transpose(A)
'
向量和均值复共轭转置ctranspose(A)
+
两个操作数时表示数组与矩阵的加法plus(A, B)
,一个操作数表示一元加uplus(A)
-
两个操作数时表示数组与矩阵的减法minus(A, B)
,一个操作数表示一元减uminus(A)
:
冒号运算符,用于分区提取
IPT支持的图像算术函数
imadd
两幅图像相加或把常数加到图像imsubtract
两幅图像相减或从图像中减去常数immultiply
两幅图像相乘,其中相乘是在相应的像素对间进行的;或者图像乘以一个常数imdivide
两幅图像相初,其中相除是在相应的像素对间进行的;或者图像除以一个常数imabsdiff
计算两幅图像间的绝对差imcomplement
对图像求补imlincomb
计算两幅或多幅图像的线性组合
逻辑函数
xor
异或,若两个操作数逻辑上不同,则函数返回1,否则,返回0all
若一个向量中的所有元素都非零,则函数all返回1,否则返回0any
若一个向量中的任何元素都非零,则函数any返回1,否则返回0.该函数在矩阵中按列操作
返回逻辑1或0的函数
iscell(C)
若C是单元数组,则为真iscellstr(s)
若s是字符串单元数组,则为真ischar(s)
若s是字符串,则为真isempty(A)
若A是空数组[],则为真isequal(A, B)
若A和B有相同的元素和维数,则为真isfield(A, 'name')
若’name’是结构S的一个域,则为真isfinite(A)
若数组A的元素有限,则为真isinf(A)
若数组A的元素无限,则为真isletter(A)
若数组A的元素是字母表中的字符,则为真islogical(A)
若A是逻辑数组,则为真ismember(A, B)
若A的元素也是B的元素,则为真isnan(A)
若S的元素是NaN,则为真isnumeric(A, B)
若A是数值数组,则为真isprime(A)
若A的元素是素数,则为真isreal(A)
若A的元素无虚部,则为真isspace(A)
若A的元素是空白字符,则为真issparse(A)若A是稀疏矩阵,则为真 isstruct(S)
若S第一个结构,则为真
常用变量和常量
ans
最新的答案(变量)eps
浮点数的相对精度,常加在表达式的分母中,防止分母为0i/(j)
虚数单位Nan /nan
非数的缩写,Not-a-Numberpi
圆周率realmax
计算机所能表示的最大浮点数realmin
计算机所能表示的最小浮点数computer
计算机类型version
MATLAB版本e
表示10的幂次
代码优化
向量化循环
简单地将for
循环和while
循环转换为等价的向量或矩阵运算。向量化代码的运行速度比基于for循环的代码运行速度快1000倍左右。例
假设我们要生成一个一维函数,该函数的表达式为:f(x) = A sin(x / 2π) ; x = 0, 1, 2, ··· , M - 1
实现该计算的for循环为:
for x = 1 : M
f(x) = A * sin((x - 1) / (2 * pi));
end
但是在向量化后,代码的效率会更高,上述代码可简化为:
x = 0 : M - 1;
f = A * sin(s / (2 * pi));
当将被评估的函数有两个变量时,MATLAB使用函数meshgrid
来实现二维函数的评估,该函数的语法为[C, R] = meshgrid(c, r)
该函数将由行向量c和r指定的域变换为数组C和R,这两个数组能用来评估有着两个变量的函数和三维表面图(在meshgrid
的输入输出中,列总是首先列出)。函数将网格向量c和r复制到C和R,产生矩形网格(C,R)的坐标。 网格矢量c被复制次数(r)次以形成C列。网格向量r复制次数(c)次以形成R行。
预分配数组
另一种方法是在程序中预分配数组的大小。在处理数值或逻辑数组时,预分配只是简单地创建有着适合维数的数组,数组的元素均为0.例
我们在处理两幅大小均为1024*1024像素的图像f和g,则预分配由以下语句构成:f = zeros(1024);
g = zeros(1024);
处理大数组时,预分配帮助我们减少存储器碎片。动态存储器的分配和去分配会使得存储器出现碎片。实际的结果是在计算过程中可能会有足够空间的可用物理存储器,但可能没有足够的连续空间来容纳一个较大的变量。预分配通过在计算开始就允许MATLAB为大数据构造保留足够的存储空间,来组织无连续空间的情形出现。
单元数组与结构简介
单元数组使用大括号将数组括起。单元数组的一个重要属性是,它包含的是参量的副本,而不是指向该参量的指针。例
若我们处理一个单元数组c = {A, B}
其中A和B都是矩阵,则这些矩阵稍后会在程序中改变,但是c的内容不变。
结构类似于单元数组,它们都允许将不同的数据集集成到单个变量中,但与单元数组不同的是,单元数组中的单元由数组寻址,而结构的元素由域来寻址。使用域可增强M函数的可读性,但具体取决于应用。例
对于单元数组:
c = {'gauss', [1 0; 0 1], 3};
c{1} % ans = gauss
c{2} % ans = [1 0; 0 1]
c{3} % ans = 3
对于结构,令s表示结构变量,并使用(任意的)域名
s.char_string = 'gauss';
s.matrix = [1 0; 0 1];
s.scalar = 3;
% 利用域名寻址
s.char_string % ans = gauss
% 类比即可···
来源:https://blog.csdn.net/Thera_qing/article/details/99690674