使用更少的网格和repmat
的函数
meshgrid
和
repmat.
在MATLAB方面有着悠久而丰富的历史。今天,我将试图说服你少用它们。
meshgrid
这个函数
meshgrid
通常用来取一个x坐标的向量和一个y坐标的向量,把它们变成两个矩阵,
X
和
Y
,可用于计算两个变量的函数。这是一个小例子。
X = [0 1 2];
Y = [0 10 20 30];
[x,y] = meshgrid(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] = meshgrid(x,y);
z = x. * exp( - (x. ^ 2 + y. ^ 2));
冲浪(Z)
的变量
x
和
y
是vectors,和变量
X
和
Y
矩阵:
谁x y x y
这个函数
meshgrid
已被用来构造相同大小的矩阵,使得它们可以在代表两个空间坐标的矩阵上的各种元素 - 明智的算术运算中组合在一起。
repmat.
函数名
repmat.
是“复制矩阵”的缩写。一个常见的用途
repmat.
是将矢量复制为矩阵的大小,或者将矩阵复制为3-D阵列的大小。经典示例是从矩阵中减去列均值:
兰德(4)=
col_means =意味着(1)
b = repmat(col_means,size(a,1),1)
c = a - b
MATLAB运算符改变五周年
五年前,随着MATLAB的R2016B释放,一些MATLAB运营商和功能是以许多用途的方式推广
meshgrid
和
repmat.
不再需要。与那个释放,诸如
+
和
-
两个操作数可以自动处理大小不同的操作数,只要大小差异采用特定的形式。在上面的例子中,
一个
尺码是4x4,然后呢
Col_means.
尺寸1 x4。在R2016b发布之前,该表达式
A - col_means
将产生一个错误,因为不匹配的大小。但是,从R2016b开始,当一个或另一个操作数的维数为1时,算术运算符(以及其他一些运算符和函数)可以自动匹配不同的大小。
这意味着您不再需要打电话
repmat.
从矩阵中减去列的意思。你可以用
-
操作员:
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);
第2版
使用MATLAB的数字图像处理
包括用于计算PXN矩阵的每一行之间的欧几里德距离的代码片段
X
和一个1xn向量
y
:
D =√(sum(abs(X - repmat(y,p)).^2,2));
现在可以在没有呼叫的情况下写入
repmat.
:
d = sqrt(sum(abs(x - y)。^ 2,2));
所以,下次你发现自己到达
meshgrid
或
repmat.
——也许你并不需要它!
|
评论
要发表评论,请点击此处