varargin

varargin

varargin是matlab的一個函式,是“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\n', nargin);

fprintf('Inputs from individual arguments: %d\n', stdargin)

for k = 1:size(varargin, 2)

fprintf('%d: %d\n', 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\n', nargin);

fprintf('Inputs from individual arguments: %d\n', stdargin)

for k = 1:size(varargin, 2)

fprintf('%d: %d\n', 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。

相關詞條

相關搜尋

熱門詞條

聯絡我們