我正在尝试在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);
非常感谢任何帮助。提前感谢你
答案 0 :(得分:2)
免责声明:使用eval
为dangerous!
假设您拥有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.请注意,我使用了一个后向循环来计算直方图:这是预分配h
和x
的好方法,参见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