我正试图在脚本上挤压执行时间,避免无用的大矩阵重新分配。 像
这样的操作B = A;
导致开销很小,因为B
将指向A
的相同结构,并且Matlab在更新发生之前不会分配新的。
但是这样的手术呢?
longVector = longVector(1:n);
它是否只是简单地更新longVector
结构以指向已存在的数据子集,或者(更耗时)将导致分配新向量并废弃旧向量?
答案 0 :(得分:1)
是的,它会缩小已分配的块,但随着时间的推移会导致碎片化(在Windows系统上)。
答案 1 :(得分:0)
我不确定这是否会更好(我没有测试过差异),但你可以尝试longVector(n+1:end)=[]
。我很确定不会分配新的变量。
答案 2 :(得分:0)
我相信MATLAB
A = B;
除非后面跟着
clear B;
至少消耗两倍的内存。 至少在mac和最多几个版本(2009年左右)就是如此。
顺便说一下,你在这里想要达到的目标尚不清楚? 为什么这会改善你的表现?