使用索引将元素插入矩阵

时间:2015-06-16 15:59:57

标签: arrays matlab

我想使用索引将元素添加到数组中。

array_in = [1 5 6 8 9];
index = [2 4];
newElements = [25 67];
index = index + (0:length(index)-1);

预期产出:

array_out = [1 25 5 6 67 8 9];

1.使用循环:

 tmp = array_in;

for idx = 1:length(index)
  array_out =  cat(2,tmp(1:index(idx)-1),newElements(idx),tmp(index(idx):end));
  tmp = array_out;
end

2.使用句柄调用函数的代码:

fcn_Insert = @(a, x, n) cat(2,  x(1:n-1), a, x(n:end));
array_out = fcn_Insert(newElements,array_in,index)

上面的代码.2(功能)不起作用?可以任何人建议解决方案。还有其他更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

这是基于sort的方法:

array_out = [array_in newElements];             %// append new to old
[~, ind] = sort([1:numel(array_in) index-.5]);  %// determine new order needed
array_out = array_out(ind);                     %// apply that order

答案 1 :(得分:1)

在Luis的回答被接受之前,我正在努力解决这个问题。如果人们感兴趣,它的速度会快两倍。

function array_out = Insert(array_in, index, values)
    array_out = zeros(length(array_in)+length(index), 1);

    oldIndex = ~ismember(1:length(array_out), index);

    array_out(index) = values;
    array_out(oldIndex) = array_in;
end