使用更少的网格和repmat
的函数
meshgrid
和
雷普马特
在MATLAB方面有着悠久而丰富的历史。今天,我将试图说服你少用它们。
meshgrid
这个函数
meshgrid
通常用来取一个x坐标的向量和一个y坐标的向量,把它们变成两个矩阵,
X
和
Y
,可用于计算两个变量的函数。下面是一个小示例。
X = [0 1 2];
y=[010030];
[X,Y]=网格网格(X,Y)
下面是另一个例子,说明了如何
meshgrid
通常是使用。这个例子,取自2009年的第二版
基于MATLAB的数字图像处理
构造函数的曲面图
$f(x,y)=xe^{-(x^2+y^2)}$
.
x=-2:0.1:2;
y=-2:0.1:2;
[X,Y]=网格网格(X,Y);
Z=X*exp(-X.^2+Y.^2));
冲浪(Z)
的变量
x
和
y
是向量和变量
X
和
Y
矩阵:
谁x y x y
这个函数
meshgrid
用于构造大小相同的矩阵,以便它们可以在表示两个空间坐标的矩阵上的各种元素算术运算中组合在一起。
雷普马特
函数名
雷普马特
是“复制矩阵”的缩写。一个常见的用途
雷普马特
是将向量复制为矩阵大小,或将矩阵复制为三维数组大小。一个经典示例是从矩阵中减去列平均值:
兰德(4)=
col_means =意味着(1)
B=repmat(col_表示,尺寸(A,1),1)
C=A-B
MATLAB运算符改变五周年
五年前,随着MATLAB R2016b的发布,一些MATLAB操作符和函数以一种广泛使用
meshgrid
和
雷普马特
不再需要了。随着该版本的发布,诸如
+
和
-
两个操作数可以自动处理大小不同的操作数,只要大小差异采用特定的形式。在上面的例子中,
一个
尺码是4x4,然后呢
col_意思是
尺寸1 x4。在R2016b发布之前,该表达式
A - col_means
将产生一个错误,因为不匹配的大小。但是,从R2016b开始,当一个或另一个操作数的维数为1时,算术运算符(以及其他一些运算符和函数)可以自动匹配不同的大小。
这意味着你不再需要打电话了
雷普马特
从矩阵中减去列的意思。你可以用
-
接线员:
C = A -均值(A,1)
此外,您通常不再需要使用
meshgrid
如上所示,计算两个变量的函数。上一个示例中的代码现在可以写成:
x=-2:0.1:2;
y=(-2:0.1:2)';
Z=x*exp(-x.^2+y.^2));
冲浪(Z)
第三版(2020年)
基于MATLAB的数字图像处理
相应地修改了。
更多信息
有关此更改的详细信息和历史,我推荐这些资源。前三个出现在Loren Shure的Art of MATLAB博客上;前两篇是我写的。最后一个源代码是一个MATLAB文档页面。
还有两个例子
(x, y) = meshgrid (x1, x2);
r =函数(x, y);
km=0.7*pi;
rm=x2;
w=rm/10;
Term1 = sin((km * r.^2) / (2 * rm));
Term2 = 0.5*tanh((rm - r)/w) + 0.5;
G = term1 .* term2;
I = (g + 1)/2;
的
海波
不过,函数现在支持隐式扩展,因此金宝app
meshgrid
没有必要。前几行可以重写为:
x=x1:x2;
y = x ';
r =函数(x, y);
第二版
基于MATLAB的数字图像处理
包含一个代码片段,用于计算pxn矩阵每行之间的欧几里德距离
X
和一个1xn向量
y
:
D=sqrt(和(绝对值X-repmat(y,p,1))^2,2);
现在,无需调用
雷普马特
:
D=sqrt(总和(绝对值(X-y)^2,2));
所以,下一次你发现自己想要
meshgrid
或
雷普马特
——也许你并不需要它!
|
评论
如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。