我编写了一个函数myMerge,它合并了两个已排序的行向量,这样可以正常工作。
我现在正在尝试编写一个调用myMerge的新函数MergedExp,然后检查是否有任何元素相同,如果是,则删除一个。例如,如果我输入两个行向量[1,3,5,6]和[2,5,7,8],myMerge将给出[1,2,3,5,5,6,7,8]和我希望MergedExp生成[1,2,3,5,6,7,8] 这就是我到目前为止所拥有的
function [ answer ] = MergedExp( a,b )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
Merge=myMerge(a,b);
l=length(a)+length(b);
for i=1:l-1
if (Merge(i)==Merge(i+1))
Merge(i)=[];
end
end
end
当我删除半冒号以便看到该功能的每一步都工作时,它确实给出了我之后的答案,但仍显示错误信息。
如何解决这个问题的任何想法都将非常感激。
答案 0 :(得分:1)
我建议使用MATLAB的内置函数unique
。
例如,
MergedList = [1 2 3 3 3 3 4 5]
MergedList = unique(MergedList)
输出:
MergedList =
1 2 3 4 5
答案 1 :(得分:1)
您遇到的错误来自于您将几乎整个向量1
循环到length(vector)-1
这一事实,但在执行此操作时,您会删除一些元素。因此,在某些时候,for
循环到达的索引不再对应于向量元素。这会导致错误。
对此的众多解决方案之一是存储要删除的索引,并在for
循环完成后删除它们。
ind_to_remove = [];
for i=1:l-1
if (Merge(i)==Merge(i+1))
ind_to_remove = [ind_to_remove i];
end
end
Merge(ind_to_remove) = [];