3

テストセットのデータを含む1つの行列*u_test*があります。フォーマットは次のようなものです。

X  y  value
1  3  5.0
1  6  3.4
4  3  2.0

* u_test *からマトリックステストを作成して、評価の値が正しい位置にくるようにします。次に例を示します。

   1    2    3    4    5    6

1:          5.0 
2:                         3.4
3:
4:          2.0

これを行うためのループのない方法はありますか?

4

2 に答える 2

4

最も簡単な方法は、SPARSEを使用することです

out = sparse(u_test(:,1),u_test(:,2),u_test(:,3));

配列のターゲットサイズがである必要があるm-by-n場合は、代わりに書き込むことができます

out = sparse(u_test(:,1),u_test(:,2),u_test(:,3),m,n);

u_testスパースを使用することの良い点は、行列が大きい場合にスペースを取りすぎないことです。ただし、何らかの理由でスパースを使用できない場合は、を使用して完全な行列に変換してください

outNotSparse = full(out);
于 2012-12-05T17:32:01.850 に答える
3

かなり簡単な方法は、関数sub2indを使用します。

A = [1 3 5; 1 6 2; 4 3 2];

maxima = max(A(:,1:2));
xsub = A(:,1);
ysub = A(:,2);

index = sub2ind(maxima, xsub, ysub);

C = zeros(maxima);
C(index) = A(:,3);

これにより、の3つの列が解析されA、最初の2つが線形インデックスに変換されます。これらは、データをの適切な場所に割り当てるために使用されますC

于 2012-12-05T17:33:09.303 に答える