3

私は行列Aを持っています

A=[f magic(10)]
    A=

931142103          92          99           1           8          15          67          74          51          58          40
931142103          98          80           7          14          16          73          55          57          64          41
931142103           4          81          88          20          22          54          56          63          70          47
459200101          85          87          19          21           3          60          62          69          71          28
459200101          86          93          25           2           9          61          68          75          52          34
459200101          17          24          76          83          90          42          49          26          33          65
459200101          23           5          82          89          91          48          30          32          39          66
37833100          79           6          13          95          97          29          31          38          45          72
37833100          10          12          94          96          78          35          37          44          46          53
37833100          11          18         100          77          84          36          43          50          27          59

最初の列は企業コードです。残りの列は企業のデータで、各行は特定の年の列 1 の企業を参照しています。年数はすべての企業でバランスが取れているわけではないことに注意してください。最初の列に従ってサブマトリックスを減算したいと思います。たとえば、A(1:3,2:11)931142103 の場合:

 A(1:3,2:11)

ans =

    92    99     1     8    15    67    74    51    58    40
    98    80     7    14    16    73    55    57    64    41
     4    81    88    20    22    54    56    63    70    47 

と同じ459200101(これはA(4:7,2:11)) およびA(8:10,2:11)for37833100.

コードは次のようにすべきだと思います:

  indices=find(A(:,1));
    obs=size(A(:,1));
    for i=1:obs,
        if i==indices(i ??)
            A{i}=A(??,2:11);
        end
    end

これらの複雑なコードを索引付けするのは困難で459200101あり37833100、それらをまとめるのも困難です。そして、サブマトリックスの行をどのように書くことができA{i}ますか?

本当にありがとう!

4

3 に答える 3

2

結果が内部的に順序付けられていなくても構わない場合は、次のように使用できますaccumarray

[~,~,I] = unique(A(:,1),'stable');
partitions = accumarray(I, 1:size(A,1), [], @(I){A(I,2:end)});
于 2015-03-18T00:30:39.130 に答える