matlab:如何从行向量中删除元素

时间:2014-02-22 18:16:16

标签: matlab

我编写了一个函数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

当我删除半冒号以便看到该功能的每一步都工作时,它确实给出了我之后的答案,但仍显示错误信息。

如何解决这个问题的任何想法都将非常感激。

2 个答案:

答案 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) = [];