的函数
meshgrid
而且
repmat
在MATLAB中有着悠久而丰富的历史。今天,我将试着说服你少用它们。
meshgrid
这个函数
meshgrid
通常用于取x坐标的向量和y坐标的向量并将它们转化为两个矩阵,
X
而且
Y
,可以用来计算两个变量的函数。这里有一个小例子。
[X,Y] = meshgrid(X,Y)
0 0 0 10 10 10 20 20 30 30 30
下面的另一个例子说明了如何做到这一点
meshgrid
通常使用。例子,摘自第2版(2009)
数字图像处理MATLAB,
构造函数的曲面图
$ f(x,y) = xe^{-(x²+ y²)}$
.
Z = X *exp(-(X。²+ y .²));
的变量
x
而且
y
是向量,还是变量
X
而且
Y
矩阵:
谁x y x y
名称大小字节类属性X 41x41 13448 double Y 41x41 13448 double X 1x41 328 double Y 1x41 328 double
这个函数
meshgrid
已用于构造相同大小的矩阵,以便它们可以在表示两个空间坐标的矩阵上的各种元素算术运算中组合在一起。
repmat
函数名
repmat
是“复制矩阵”的缩写。一种常见的用法
repmat
将一个矢量复制成一个矩阵的大小,或将一个矩阵复制成一个三维数组的大小。一个经典的例子是从矩阵中减去列均值:
A = rand(4)
0.8147 0.6324 0.9575 0.9572 0.9058 0.0975 0.9649 0.4854 0.1270 0.2785 0.1576 0.8003 0.9134 0.5469 0.9706 0.1419
col_means = mean(A,1)
0.6902 0.3888 0.7627 0.5962
B = repmat(col_means,size(A,1),1)
0.6902 0.3888 0.7627 0.5962 0.902 0.3888 0.7627 0.5962 0.5962
C = a - b
0.1245 0.2435 0.1949 0.3610 0.2156 -0.2913 0.2022 -0.1108 -0.5632 -0.1103 -0.6050 0.2041 0.2232 0.1581 0.2079 -0.4543
MATLAB算术运算符变更五周年
五年前,随着MATLAB的R2016b发布,一些MATLAB算子和函数以一种被广泛使用的方式进行了广义化
meshgrid
而且
repmat
不再需要了。有了这个版本,诸如
+
而且
-
取两个操作数可以自动处理不同大小的操作数,只要大小差异采用特定的形式。在上面的例子中,
一个
有4x4码的,还有
col_means
大小为1x4。在R2016b发布之前,表达式
A - col_means
会产生一个错误,因为大小不匹配。但是,从R2016b开始,当一个或另一个操作数的维数在不匹配的维数中为1时,算术操作符(以及一些其他操作符和函数)可以自动匹配不同的大小。
这意味着你不再需要打电话
repmat
从矩阵中减去列意味着。你可以用
-
接线员:
C = A - mean(A,1)
0.1245 0.2435 0.1949 0.3610 0.2156 -0.2913 0.2022 -0.1108 -0.5632 -0.1103 -0.6050 0.2041 0.2232 0.1581 0.2079 -0.4543
此外,您通常不再需要使用
meshgrid
如上所示,计算两个变量的函数。前面例子中的代码现在可以写成:
第3版(2020年)
利用MATLAB进行数字图像处理
作了相应的修订。
更多信息
有关此更改的细节和历史的更多信息,我推荐以下来源。其中前三个出现在Loren Shure的MATLAB艺术博客上;前两集是我客串写的。最后一个来源是MATLAB文档页面。
再举两个例子
2011年,我写道
一些博客文章
关于生成一个测试图像,有人称之为
波带片
.我也把相关的代码放在File Exchange上作为函数
imzoneplate
.以下是原始实现的关键数学部分:
的
函数的
函数现在支持隐式展开,因此调用金宝app
meshgrid
没有必要。前几行可以重写为:
第二版
利用MATLAB进行数字图像处理
包含一个代码片段,用于计算pxn矩阵的每一行之间的欧氏距离
X
和一个1xn向量
y
:
现在可以不调用
repmat
:
所以,下次你发现自己伸手的时候
meshgrid
或
repmat
——也许你不需要它!
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。