我正在測試矩陣上包含nlfilter
的函數。爲此,我創建了一個隨機11X11矩陣,並在nlfilter
的幫助下使用7x7移動窗口。我的功能如下:'nlfilter'如何填充矩陣?
function funct(fh)
I = rand(11,11)
ld = input('Enter the lag = ') % prompt for lag distance
fh = @dirvar,@diagvar;
A = nlfilter(I, [7 7], fh);
% Subfunction
function [h] = dirvar(I)
c = (size(I)+1)/2
EW = I(c(1),c(2):end)
h = length(EW) - ld
end
% Subfunction
function [h] = diagvar(I)
c = (size(I)+1)/2
NE = diag(I(c(1):-1:1,c(2):end))
h = length(NE) - ld
end
end
當運行funct('dirvar')
它要求滯後,選擇第一行的4個元素,並通過元件前進元件。從第一行的第9到第11個元素,它將0作爲最後的元素(自動填充),這是預期的行爲。
但是,當我運行funct('diagvar')
函數行爲相同(如在dirvar),而不是對角線選擇元素和填充。對於第一行,我期望它從第一行和三個零中選擇第一個元素,依此類推直到行尾;當涉及到第二行時 - 第一個元素將是第二行 - 第一個元素+第一行 - 第二個元素後面跟着2個零等等。
如果我剛創建順序11×11個的隨機矩陣並運行diagvar
它從矩陣中選擇的中心值和進步如預期線。
選項#3有竅門。事實上#2也有效,但我用#3。非常感謝! – 2011-04-18 14:39:11