2014-02-22 153 views
1

我已经写了一个函数myMerge,它合并了两个已排序的行向量,这是可行的。matlab:如何从一个行向量中删除一个元素

我现在正在尝试编写一个新的函数MergedExp,它调用myMerge,然后检查是否有任何元素是相同的,如果是这样就删除一个。例如,如果我输入两行矢量[1,3,5,6]和[2,5,7,8] myMerge会给[1,2,3,5,5,6,7,8]和i要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

这是一个特定的任务,排除使用现成的函数,如'union'吗?如果是这样,考虑到'for'使用一组固定的索引,缩短循环内的向量的效果。提示1:while循环每次迭代评估其条件。提示2:或者,考虑'Merge(2:end)〜= Merge(1:end-1)'的结果。 – Notlikethat

回答

1

我会推荐使用MATLAB的内置函数unique

例如,

MergedList = [1 2 3 3 3 3 4 5] 
MergedList = unique(MergedList) 

输出:

MergedList = 

    1  2  3  4  5 
+0

谢谢你的帮助。对不起,我应该提到,如果可能的话,我正在尝试不使用内置功能 – user3058633

+0

@ user3058633,如果它在几分钟内没有得到答复,我会回到这里。但是,现在看看是否有帮助:当你循环时,数组的大小会发生变化。所以,你的循环限制不能再一样了。另外,您的重复查找算法中存在一个小错误。 – Nitish

1

你的错误来自于事实,你遍历几乎全矢量,1length(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) = []; 
相关问题