matlab在数组中插入,一次快速插入一个Matlab数组元素

我正试图加速我的代码中的主要瓶颈 . 它是将数组元素插入数组的中间 . 这些元素必须一次插入一个,因为我事先并不知道 . 我无法收集它们并立即将它们全部插入,因为稍后出现的元素(以及它们的插入位置)以复杂的方式依赖于更新的数组 .

我推测速度限制是由于两个因素造成的:(1)矢量一次生长一个元素,以及(2)复制插入元素时需要向右碰撞的所有元素 . 因子#2有点简化,因为我怀疑在插入新元素时整个更新的矢量是完整的 . 我认为我没有解决因素#2的解决方案,但我确实尝试了因子#1的一些可能性 - 即预分配 .

以下测试表明,我尝试的替代方法无法改进我当前的方法(无预分配) . 测试使用内部循环迭代地将新元素插入到数组的位置2中 . out循环只是重复执行此测试100次以获得更好的定时统计数据 .

clc; Ntests=1e4;

disp('1) Pre-allocate, update vector in-place without creating new array.')

tic

for j = 1 : Ntests

clear a

a(100) = 0;

a(1)=1;

for i = 2:100

a(3:end) = a(2:99);

a(2) = i;

end % i

end % j

toc

disp('2) Pre-allocate, copy & create new array by concatenation.')

tic

for j = 1 : Ntests

clear a

a(100) &

你可能感兴趣的:(matlab在数组中插入)