彻底解决了,谢谢关注!

本帖最后由 hettyw 于 2009-10-8 13:34 编辑

现有组数据(t,x),t,x分别为同长度的向量,我想写一段程序,检查t的值是否有重复,然后把重复的后一个以及相对应的x值去掉,但是这样t长度就会减少,而写循环的时候定义的最大值就不对了。
请问如何能解决此问题,谢谢!

我自己写的如下,好像if用的也不对,反正总之就是运行不出来:
n=length(t);
for i=1:n-1
    for j=i+1:n
        if t(i)==t(j)
            t(j)=[];
            x(i)=(x(i)+x(j))/2;
            x(j)=[];
        end
    end
end
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……
Share |
Share

[img][/img]

TOP

Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

写了老半天了,就剩这个问题解决不出来
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

你可以先把这些重复的元素赋值为 0或者其它值,然后等你这段循环运行完之后,再写一段删除这些 0 的程序。比较笨的方法啊。。呵呵

TOP

本帖最后由 hettyw 于 2009-10-7 15:33 编辑

5# liujiayukob


首先谢谢回复!
不过我也想过这样,但这些点怎么再找到呢?而且如果用for循环,还是有同样的问题。
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

那你在x(j)=[]  ;
的后面再加一个n=length(t); 可以吗?

TOP

7# liujiayukob


好像不行,因为已经在循环里面了。
错误反馈和之前一样,还是
Attempted to access t(108); index out of bounds because numel(t)=107.
Error in ==> temp at 6
        if t(i)==t(j)
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

楼主可以试一下下面的办法
[t_new , index] = unique(t,'first');
t_new = t(sort(index));
for i=1:length(t_new)
   x_new(i) = mean(x(t == t_new(i)));
end

TOP

这个东西都忘记了。。飘过。。。我看看 或许想的起来
我能看见的 现在 只有我的娃

TOP