词条 | varargin |
释义 | matlab中varargin简介 varargin可以看做“Variable length input argument list”的缩写。在matlab中, varargin提供了一种函数可变参数列表机制。 就是说, 使用了“可变参数列表机制”的函数允许调用者调用该函数时根据需要来改变输入参数的个数。 matlab中很多内建函数和工具箱函数都使用了这种机制。 比如图像处理工具箱中的imshow函数。 该函数允许我们根据图像数据特点来调用: 比如, 显示一张真彩色位图, 我们可以简单的使用: imshow(RGB), 其中RGB是通过imread函数读取图像获得的图像数据。这里我们只给了一个参数。 但是在显示索引图像时, 因为索引图像使用了调色板,因此为了正确显示图像, 除了图像数据外, 我们还要额外指定显示图像所使用的调色板(一般也由imread函数获得),这样就出现了以下的调用格式: imshow(X, map) 那么, 这种机制是怎么实现的呢? 借助于varargin。 相关:varargout、nargin 下面我们来看一个简单的例子,(本例子参考了matlab中varargin文档) function retvar = vartest(varargin) optargin = size(varargin, 2); % number of inputs. ndims(varargin) varargin stdargin = nargin - optargin; % 'nargin' in matlab means number of input arguments. fprintf('Number of inputs: %d\', nargin); fprintf('Inputs from individual arguments: %d\', stdargin) for k = 1:size(varargin, 2) fprintf('%d: %d\', k, varargin{k}); end end 这里定义了一个函数, 利用了可变参数列表。然后我们这样调用这个函数: >> vartest(1, 2, 3) ans = 2 varargin = [1] [2] [3] Number of inputs: 3 Inputs from individual arguments: 0 1: 1 2: 2 3: 3 我们看到, 这里varargin是一个1*3的二维矩阵, 这个矩阵即我们调用这个函数时传入的参数列表。 通过size(varargin, 2)获得的varargin第二维的尺寸(即varargin的列数)就是我们传入的参数个数。 stdargin = nargin - optargin;这一句是获取可变参数列表从第几个参数开始的。 其中, nargin也是matlab中的, 不能拼错了, nargin的 值即传入的所有参数个数。 也许你会问, 咦? 这不就是size(varargin, 2)吗? 对于本例,的确这样子。 但是有的函数, 参数列表是这样的: function vartest_2(arg1, argb, varargin) optargin = size(varargin, 2); % number of inputs. stdargin = nargin - optargin; % 'nargin' in matlab means number of input arguments. fprintf('Number of inputs: %d\', nargin); fprintf('Inputs from individual arguments: %d\', stdargin) for k = 1:size(varargin, 2) fprintf('%d: %d\', k, varargin{k}); end end 这次我们调用: >> vartest_2(1, 2, 3) Number of inputs: 3 Inputs from individual arguments: 2 1: 3 你会看到, 由于vartest_2的第一二个参数不是可变参数列表的一部分, 可变参数列表从第三个参数开始。因此 nargin等于3, 而size(varargin, 2) 等于1。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。