有没有办法以多种不同的形式使用varargin
输入。我希望varargin
输入成为结构的名称,但我也希望它被传递到fprintf
,它不接受单元格或结构数组。如果我有这样的功能:
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。如果我用“M1”,“M2”,“M3”的输入调用该函数,我希望该函数创建结构M1,M2和M3,其中A1,B1,C1 - A10,B10,C10作为字段名称。 [d,s]将保存在使用imagesc
GUI和函数measure
找到的每个字段中的数据。
问题是在循环迭代中我希望将varargin输入输入到fprintf中,并且我还希望varargin输入成为结构名称。我可以编辑代码,以便fprintf使用函数char
接受输入。但是有可能让函数中的输入成为填充数据的结构名称吗?如果是这样,解决方案仍然必须允许迭代器k传递到fprintf。
答案 0 :(得分: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