簡體   English   中英

如何將 f(x,y) 轉換為二維矩陣(即查找表)?

[英]How can I convert f(x,y) to a 2-D matrix (i.e. lookup table)?

給定f = @(x,y) [something with a scalar result] ,我可以計算查找矩陣A的最佳方法是什么A(x,y) == f(x,y)對於任何x,y在特定范圍和領域內?

假設一個名為lookupTable(f,range,domain)的 function 做了我想要的。 然后lookupTable(@(x,y) x * y, 12, 12)將產生一個矩陣,其中包含從1*1=112*12=144的乘法表。

或者假設我想要一個 6x6 矩陣,除了第 3 行第 5 列中的 1 之外全為零。我可以寫lookupTable(@(x,y) x==3&&y==5, 6, 6)

我會結合使用MESHGRIDxy生成二維輸入網格,並使用 ARRAYFUN來評估每個網格對處的標量 function f 對於您的第一個示例,您可以這樣做:

[y, x] = meshgrid(1:12, 1:12);  %# Or just [y, x] = meshgrid(1:12);
lutable = arrayfun(f, x, y);

請注意,我顛倒了輸入和輸出到 MESHGRID 的順序,以便x的值在生成的查找表的行中增加。

是這樣的嗎?

function a = lookupTable(func, cols, rows)
    a = zeros(cols, rows);
    for i = 1:cols
        for j=1:rows
            a(i,j) = func(i, j);
        end 
    end
end

打電話給

lookupTable(@(x,y) x==3&&y==5, 6, 6)

我做了一個 function 來做到這一點,你可以使用它。

它適用於任意數量的輸入。

function varargout = ndfun( fun, varargin )
%%% [A B]=ndfun(@foo,X,Y)
%%% ---> [A(i,j) B(i,j)]=foo(X(i),Y(j))
% Example:
% ndfun(@times,[1 2 3],[ 6 7 8 9])
% ans =
%      6     7     8     9
%     12    14    16    18
%     18    21    24    27
%%% par Oli 03/2012

args=cell(1,nargin-1);
[args{:}]=ndgrid(varargin{:});

varargout=cell(1,max(1,nargout));

[varargout{:}]=arrayfun(fun,args{:});

end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM