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个索引作为输入。因此,如果您多次输入,则行为将不是您想要的。