如何防止MATLAB中的内存流失?

时间:2018-03-21 20:49:54

标签: matlab

我在MATLAB中整合了一个假设树类型的算法,并且由于内存问题,它正在变得非常缓慢。分析器显示所有时间都花在写入数组上。

该算法在结构数组中保留一系列假设,并提供有关它们的信息。这个问题与假设中的3D数组(不大)有关:

H(x).someInfo(a,b,c)

每次迭代都会丢弃一些假设:

H = H(keepIndices);

剩下的那些被扩展和更新:

Hin = H;
H(N*length(H)) = H(1);  % Pre-alloc?
count = 0;
for x = 1:length(Hin)
  for y = 1:N
    count = count + 1;
    H(count) = Hin(x);
    ...  % Computations
    H(count).someInfo(:,:,a) = M;  % Much time spent here
  end
end

分析器表示只需花费大量时间进行写入(注释注释)。 “someInfo”是预先分配的,所以它本身并不是动态增长的,但它正在被复制。

任何人都可以建议一种方法来实现这种类型的功能,而不会在MATLAB处理内存的方式中使用低效率的交叉路径吗?不要责怪MATLAB,但它的灵活性使其比C ++更难。

1 个答案:

答案 0 :(得分:1)

如果> tab a b c [1,] 1 0 0 [2,] 1 1 1 [3,] 1 0 1 [4,] 0 1 1 [5,] 0 0 0 [6,] 0 1 0 的访问模式始终相同,则可以将其转换为2D矩阵的单元格数组。你会发现

someInfo

H(count).someInfo{a} = M;

因为没有复制数组数据,所以只有对数据的引用。

...如果是这种情况,您可能想要

H(count).someInfo(:,:,a) = M;

请注意,索引级别越少(你有3个!),它就越快。

相关问题