在for循环中可变地命名直方图

时间:2015-04-21 14:34:56

标签: matlab

我正在尝试在for循环中使用hist函数,因为我每次都使用不同数量的数据集,并且每次都必须编辑脚本更快更容易,但我无法做到正确。我可以帮忙吗?本质上,我试图在for循环中使用可变数量的unc{i}数据集和i [h{i},x{i}]结果数组:

[h1,x1] = hist(unc1,range);
[h2,x2] = hist(unc2,range);
[h3,x3] = hist(unc3,range);
[h4,x4] = hist(unc4,range);

非常感谢任何帮助。提前感谢你

2 个答案:

答案 0 :(得分:2)

免责声明:使用evaldangerous

假设您拥有n unc个数组。您可以使用struct来存储它们

for ii=1:n
    cmd = sprintf( 's.unc%d = unc%d;', ii, ii );
    eval( cmd );
end

一旦你有unc s是一个结构,你可以简单地

for ii=n:-1:1
    [h{ii} x{ii}] = hist( s.(sprintf('unc%d',ii)), range );
end

备注:
1.请注意,我使用了一个后向循环来计算直方图:这是预分配hx的好方法,参见this thread
2.使用eval是极不明智的,因此,创建不同的unc s数组作为结构字段开始可能更明智,跳过此答案的第一部分。

答案 1 :(得分:0)

您可以将每个输入数据集放在单元格数组中,并将直方图的输出放在第二个单元格数组中。

例如,

unc1 = rand(5,1);
unc2 = rand(5,1);
unc3 = rand(5,1);
unc_cell = {unc1, unc2, unc3};

h_cell = cell(3, 1);
x_cell = cell(3, 1);
for ii = 1:3
    [h{ii} x{ii}] = hist(unc_cell{ii}); 
end

这需要预加载所有数据集并同时将它们保存在内存中。如果这会占用太多内存,您可以在for循环中加载数据集而不是预加载它们。

例如,

h_cell = cell(3, 1);
x_cell = cell(3, 1);
for ii = 1:3
    unc = load(sprintf('data_%d.mat', ii)); %You would replace this with your file name 
    [h{ii} x{ii}] = hist(unc); 
end