矩阵重新分配

时间:2011-11-18 16:16:54

标签: matlab matrix memory-management

我正试图在脚本上挤压执行时间,避免无用的大矩阵重新分配。 像

这样的操作
B = A;

导致开销很小,因为B将指向A的相同结构,并且Matlab在更新发生之前不会分配新的。

但是这样的手术呢?

longVector = longVector(1:n);

它是否只是简单地更新longVector结构以指向已存在的数据子集,或者(更耗时)将导致分配新向量并废弃旧向量?

3 个答案:

答案 0 :(得分:1)

是的,它会缩小已分配的块,但随着时间的推移会导致碎片化(在Windows系统上)。

答案 1 :(得分:0)

我不确定这是否会更好(我没有测试过差异),但你可以尝试longVector(n+1:end)=[]。我很确定不会分配新的变量。

答案 2 :(得分:0)

我相信MATLAB

A = B;

除非后面跟着

clear B;

至少消耗两倍的内存。 至少在mac和最多几个版本(2009年左右)就是如此。

顺便说一下,你在这里想要达到的目标尚不清楚? 为什么这会改善你的表现?