0

我是 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

提前感谢您的帮助!

4

1 回答 1

0

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

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 列时。 这将- 语句简化为检查行中的所有元素是否一致(因此)。如果满足该条件,则会生成一个新矩阵 ( ),它将第 6 列中的条目相加,在这种情况下: 1Matrix{1,1}Matrix{2,1}
ifsum == 3SUM{1,1}

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

     11
     12
     14
于 2013-05-21T15:22:06.390 回答