1

私は Matlab を初めて使用しますが、ドキュメントをトロールしましたが、探しているものに対する答えが見つかりません。

私はマトリックスで多くの計算を行いましたが、インデックスのリストとそれらのインデックスに入る値のリストになりました。

例えば:

Data =

         0         0         0         0         0         0
    3.7417    3.7417    3.7417    7.0711    3.3166    3.3166
    4.2426    4.2426    3.7417    7.0711    5.3852    7.0711
    7.0711    6.0828    5.3852    7.4833    6.0828    7.6158
    7.1414    7.4833    7.8740    8.7750    7.1414    7.8740

Indices =

     1     2     3     4     5     6
     3     3     1     1     6     5
     2     1     2     6     3     4
     4     5     5     2     2     2
     5     4     6     5     1     3

私ができるようにしたいのは、正方行列 (インデックス行列で見つかった最大値のインデックスに基づくサイズ n) を構築することです。これにより、Indices最初の列が行列の最初の行のインデックスに使用されResult、値がofは、0 に設定されたデータでインデックス付けされていないすべての場所で、行列Dataの対応する場所に配置されます。Result

つまり、上記のデータとインデックスのマトリックスを使用して、最終的なマトリックスを次のようにします。

Result =
          0   4.2426    3.7417    7.0711    7.1414         0
     4.2426        0    3.7417    7.4833    6.0828         0
     3.7417   3.7417         0         0    5.3852    7.8740 
     7.0711   7.4833         0         0    8.7750    7.0711
     7.1414   6.0828    5.3852         0         0    3.3166
          0   7.6158    7.8740    7.0711    3.3166         0

(上記は手で行ったので間違いがあるかもしれませんが、私がやりたいことのアイデアを提供するはずです)

Matlabでこれを行うための簡単で簡単な方法はありますか? 多くの関数がインデックスを返すため、これらのインデックスを使用してマトリックスを更新/構築する簡単な方法があることを望んでいました。

ありがとう、

グレッグ

4

3 に答える 3

2

に基づいたこのソリューションは、bsxfun@nispio および @chappjc によるソリューションよりも少し速いようです。

S = max(Indices(:));
Result = zeros(S);
Result(bsxfun(@plus, (Indices-1)*S, 1:S)) = Data;
于 2013-11-07T11:30:17.850 に答える