熊猫 发表于 2007-2-28 14:50

新手问个问题,请大家帮忙谢谢

请问这个错在哪里


x=[2003      8      6      0.4
2003      8      7      0.3
2003      8      11      -0.6
2003      8      16      -0.6
2003      8      17      0.6
2003      8      17      0.3
2003      8      17      0.2
2003      8      18      1.3
2003      8      18      0.7
2003      8      20      0.6
2003      8      21      0.6
2003      8      21      0.5
2003      8      21      4.6]

我想比较前3项如果相同的话就将最后一项相加并上移,如
2003      8      16      -0.6
2003      8      17      0.6
2003      8      17      0.3
2003      8      17      0.2
变为
2003      8      16      -0.6
2003      8      17      1.1

j=13;
for n =1:12
   for m =n+1:j
       if((x(n,1)==x(m,1))&&(x(n,2)==x(m,2))&&(x(n,3)==x(m,3)))
         x(n,4)=abs(x(n,4))+abs(x(m,4));   
         j=j-1;
         x(m,:)=[];
       end
   end
end
请问错在哪里啊

[ 本帖最后由 eight 于 2007-2-28 15:45 编辑 ]

eight 发表于 2007-2-28 15:56

x(m,:)=[];

这个语句执行后会导致矩阵x的维数发生变化(行数减少)

熊猫 发表于 2007-2-28 16:10

我把它换成这种的
j=13;
for n =1:j-1
   for m =n+1:j
       if((x(n,1)==x(m,1))&&(x(n,2)==x(m,2))&&(x(n,3)==x(m,3)))
         x(n,4)=abs(x(n,4))+abs(x(m,4));   
         j=j-1;
         x(m,:)=[];
       end
   end
end
可是还是有错

eight 发表于 2007-2-28 17:25

原帖由 熊猫 于 2007-2-28 16:10 发表
我把它换成这种的
j=13;
for n =1:j-1
   for m =n+1:j
       if((x(n,1)==x(m,1))&&(x(n,2)==x(m,2))&&(x(n,3)==x(m,3)))
         x(n,4)=abs(x(n,4))+abs(x(m,4));   
       ...


用以下代码吧,不知道有没有更简单的方法,欢迎指点

= unique(x(:,1:3), 'rows');
y = ;
for i = 1:max(n)
    y(i, 4) = sum(x(i == n, 4));
end
y

[ 本帖最后由 eight 于 2007-2-28 17:32 编辑 ]

xjzuo 发表于 2007-2-28 22:56

eight正解.若要好看一些,可稍作如下修改:
================================
= unique(x(:,1:3),'rows');
k = max(n);  %%% 可统一用k标记元素不相同的行数.
y = ;
for i = 1:k
    y(i,4) = sum(x(i==n,4));
end
y

eight 发表于 2007-2-28 23:12

原帖由 xjzuo 于 2007-2-28 22:56 发表
eight正解.若要好看一些,可稍作如下修改:
================================
= unique(x(:,1:3),'rows');
k = max(n);  %%% 可统一用k标记元素不相同的行数.
y = ;
for i = 1:k
    y(i,4) = sum(x ...

y= 有问题,y的第一维大小并非k

==================================
我算了一下, 好象并没有问题.
"y的第一维大小并非k"--------不知eight是否动手算了一下?
by xjzuo
==================================

==========eight=========================
不好意思,看错了,呵呵。你说得对,我当时没有动手算:lol ,
只粗略看了一下,不好意思:loveliness:
=======================================

[ 本帖最后由 eight 于 2007-3-1 10:44 编辑 ]

熊猫 发表于 2007-3-1 09:49

回复 #4 eight 的帖子

请问y = ;是 什么 意思啊

熊猫 发表于 2007-3-1 09:52

回复 #4 eight 的帖子

为什么如果我用b=得到的结果却是5列呢

熊猫 发表于 2007-3-1 09:54

回复 #2 eight 的帖子

我知道了,谢谢了,我用了两次所以多了一列,
真的 很 谢谢
页: [1]
查看完整版本: 新手问个问题,请大家帮忙谢谢