1

有没有办法以varargin几种不同的形式使用输入。我希望varargin输入成为结构的名称,但我也希望将其传递到fprintf不接受单元格或结构数组的 a 中。如果我有这样的功能:

function[] = myfunc(varargin)
for k = varargin
    for m = 'ABC'
        for n = 1:10
            varname = sprintf('%c%d',m,n);
            filename = sprintf('Images\\%s',varname);
            fprintf('Take measurement %s for %s\n',k,varname);
            image = imread(fullfile(filename));
            pause
            cursor_info = evalin('base','cursor_info');
            p1 = cursor_info(2).Position
            p2 = cursor_info(1).Position
            [d,s] = measure(p1,p2)  %measure is a separate function in my directory 
            k.(varname) = [d,s] 
        end
    end
    save('Distances,'k','-append')
end

我的函数用于分析几张图片,因此是 ABC 和 1:10 for 循环。如果我使用“M1”、“M2”、“M3”的输入调用该函数,我希望该函数以 A1、B1、C1 - A10、B10、C10 作为字段名称创建结构 M1、M2 和 M3 . [d,s] 将是通过imagescGUI 和功能找到的每个字段中保存的数据measure

问题是,在循环迭代中,我希望将 varargin 输入输入到 fprintf 中,并且我还希望 varargin 输入成为结构名称。我可以编辑代码,以便 fprintf 使用函数接受输入char。但是是否可以将函数中的输入变成结构的名称来填充数据?如果是这样,解决方案仍然必须允许将迭代器 k 传递给 fprintf。

4

1 回答 1

1

您可以拥有一个包含所有k-s 的单一结构,然后您可以通过'-struct'选项将其“剥离”到其字段中来保存它:

function[] = myfunc(varargin)
for k = varargin
    for m = 'ABC'
        for n = 1:10
            % your stuff here... I am too lazy to copy it...
            [d,s] = measure(p1,p2)  %measure is a separate function in my directory 
            meta.(k{1}).(varname) = [d,s] ; % note the {1} for k, loop over cell elements
        end
    end
    save('Distances','meta','-struct','-append'); % not 100% sure -append wirks with -struct, you'll have to verify that...
end
于 2013-08-12T15:59:22.460 回答