我是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
提前感谢您的帮助!
答案 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列时1
和Matrix{1,1}
中相同的每个元素存储Matrix{2,1}
。
这会将if
- 语句简化为检查行中的所有元素是否一致(因此sum == 3
)。如果满足该条件,则生成一个新矩阵(SUM{1,1}
),该矩阵对第6列中的条目求和,在这种情况下:
SUM{1,1}(:,6) =
11
12
14