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

行列は、列 1、2、および 4 を比較するときに同じ 要素のfor 各要素をCOMP格納します。その条件が満たされる場合、列 6 のエントリを合計する新しい行列が生成されます ( )。この場合は次のとおりです。 1Matrix{1,1}Matrix{2,1}
ifsum == 3SUM{1,1}

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

     11
     12
     14
于 2013-05-21T15:22:06.390 に答える