我已经从收集结构中的Matlab模拟结果转换为在表格中收集它们。我对这种表示数据的方式非常满意,但我仍然不确定如何处理内存预分配。如果我只是在表的底部添加行,我会遇到在每次迭代中重新分配表中包含的所有变量的已知问题。
我可以预先分配一些任意数量的行,并在我的脚本终止时修剪表格。但是,如果我这样做,我必须预订 - 保持实际包含数据的行数。在表值的任何操作中都必须考虑这个数字,这就是使用这个高级对象的美妙之处。
有没有办法为Matlab表预分配内存,不会改变表的行为方式,也不需要外部簿记?
修改 - 澄清
我的问题不仅适用于表格,还适用于任何Matlab变量类。多年来我一直在预先分配Matlab变量,令人沮丧的是没有有效的单行程序在没有额外管理的情况下附加数据。我希望至少表对象会包含一些更智能的内存管理解决方案。在我看来,为了避免重新分配而添加空行在科学代码中没有位置(应该尽可能抽象)。
答案 0 :(得分:0)
你可以创建自己的自定义变量/表类来实现你想要的东西,但说实话,使用你已经建议的解决方案工作要容易得多,即只使用额外的计数器变量来追踪你所处的位置。
我理解你没有“更清洁”的方式感到沮丧,但实际上并不是那么麻烦,而且任何潜在的“智能”解决方案对某些人来说效果都不错,而对于其他人来说也不是那么好,无论是出于效率原因还是除此以外。另外,我猜在很多情况下计数器已经内置在循环中:
A = zeros(2000, 1);
for i = 1:N
A(i) = i^2;
% i is the number of rows filled so far...
end