Arrays 使用索引将元素插入矩阵

Arrays 使用索引将元素插入矩阵,arrays,matlab,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.使用for循环: tmp = array_in; for idx = 1:length(index) array_out = cat(2,tmp(1:index(idx)-

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

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.使用for循环:

 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(功能)不工作?有人能提出解决办法吗。还有其他更好的解决方案吗?

这里有一个基于的方法:

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
这里有一个基于的方法:

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
这里有一个基于的方法:

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
这里有一个基于的方法:

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

在路易斯的回答被接受之前,我正在研究这个问题。如果有人感兴趣的话,它跑得快一倍

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

在路易斯的回答被接受之前,我正在研究这个问题。如果有人感兴趣的话,它跑得快一倍

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

在路易斯的回答被接受之前,我正在研究这个问题。如果有人感兴趣的话,它跑得快一倍

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

在路易斯的回答被接受之前,我正在研究这个问题。如果有人感兴趣的话,它跑得快一倍

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

您这样做是正确的,但是在您的函数中,您只允许1个索引作为输入。因此,如果您多次输入,行为将不是您想要的。您这样做是正确的,但在您的函数中,您只允许1个索引作为输入。因此,如果您多次输入,行为将不是您想要的。您这样做是正确的,但在您的函数中,您只允许1个索引作为输入。因此,如果您多次输入,行为将不是您想要的。您这样做是正确的,但在您的函数中,您只允许1个索引作为输入。因此,如果您多次输入,则行为将不是您想要的。