如何在Matlab中在一定条件下对结构矩阵之间的值进行求和?

时间:2013-05-19 23:10:47

标签: matlab matrix structure

我是matlab的新手,我不熟悉矩阵数组。我有一些矩阵nx6:

<26x6 double>
<21x6 double>
<27x6 double>
<36x6 double>
<29x6 double>
<30x6 double>
 ....

每个矩阵属于这种类型:

>> Matrix{1,1}

A   B   C   D    E                  F
1   2   6   223  735064.287500000   F11
2   3   6   223  735064.288194445   F12
3   4   6   223  735064.288888889   F13
4   5   6   223  735064.290277778   F14

>> Matrix{2,1}

A   B   C   D    E                  F
1   2   6   223  735064.700694445   F21
2   3   6   223  735064.701388889   F22
3   4   6   223  735064.702083333   F23
4   5   6   223  735064.702777778   F24

>> Matrix{3,1}

A   B   C   D    E                  F
1   2   7   86  735064.3541666666   F31
2   3   7   86  735064.3548611112   F32
3   4   7   86  735064.3555555555   F33
4   5   7   86  735064.3562499999   F34
5   6   7   86  735064.702777778    F35

>> Matrix{4,1}

A   B   C   D    E                  F
1   2   7   86   735064.3569444444  F41
2   3   7   86   735064.3576388888  F42
3   4   7   86   735064.3583333333  F43
4   5   7   86   735064.3590277778  F44
5   6   6   86   735064.702777778   F45

其中E和F是datenum格式的日期。特别是F是时差。

一次考虑所有矩阵,我想在列A,B,D中具有相等值的所有矩阵中对F列的值求和。

对于列D的每个值(总线的数量),我想获得一个如下所示的新矩阵:

A   B   C   D    H
1   2   6   223  F11+F21
2   3   6   223  F12+F22
3   4   6   223  F13+F23
4   5   6   223  F14+F24


A   B   C   D   H
1   2   7   86  F31+F41
2   3   7   86  F32+F42
3   4   7   86  F33+F43
4   5   7   86  F34+F44
5   6   7   86  F35+F45

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这种方法应该让你入门。我建议设置一个矩阵,用于存储列1,2和4之间的比较。然后,您可以根据该矩阵生成输出矩阵。这样可以节省嵌套的if语句并检查循环。
这是一个例子(请注意我更改了Matrix{1,1}的第3行):

Matrix{1,1} = [ ...

1   2   6   223  735064.287500000   1;
2   3   6   223  735064.288194445   2;
3   4   6   223  735064.288888889   3;
4   5   6   223  735064.290277778   4];

Matrix{2,1} = [ ...

1   2   6   223  735064.700694445   10;
2   3   6   223  735064.701388889   10;
2   4   6   223  735064.702083333   10;
4   5   6   223  735064.702777778   10];

COMP = Matrix{1,1}(:,[1:2 4])==Matrix{2,1}(:,[1:2 4]);

a = 1;

for i=1:size(Matrix{1,1},1)
    if sum(COMP(i,:)) == 3
        SUM{1,1}(a,1:5) = Matrix{1,1}(i,1:5);
        SUM{1,1}(a,6) = Matrix{1,1}(i,6) + Matrix{2,1}(i,6);
        a = a + 1;
    end
end

矩阵COMP为比较第1,2和4列时1Matrix{1,1}中相同的每个元素存储Matrix{2,1}。 这会将if - 语句简化为检查行中的所有元素是否一致(因此sum == 3)。如果满足该条件,则生成一个新矩阵(SUM{1,1}),该矩阵对第6列中的条目求和,在这种情况下:

 SUM{1,1}(:,6) = 

     11
     12
     14