あなたがゼロ以外の行と列の位置を指定することができ、およびマトリックスの残りの部分はゼロになりsparse
とfull
の組み合わせを使用することができます:sparse
コマンド行にかかる
A = [7 1; 3 2; 4 3];
B = full(sparse(A(:,1), A(:,2), 1, max(A(:,1)), max(A(:,2)))) == 1;
を最初の2つの入力が非ゼロである列の位置を指定すると、3つ目の入力は、各行と列の位置に対して非ゼロの位置を指定します。すべての非ゼロ位置が同じ係数1を得ることを意味する定数を指定することができます。行列のサイズを指定することもできます。この場合、出力の行と列は、それぞれ第1および第2の列を含む。これはsparse
行列なので、これをfull
行列に変換し、それを論理的にしたいので、すべての要素を1と比較したいと思うでしょう。
B
ある:あるいは
B =
7×3 logical array
0 0 0
0 0 0
0 1 0
0 0 1
0 0 0
0 0 0
1 0 0
、我々は偽logical
の予め割り当てられた行列のインデックスに線形インデックスを作成するためにsub2ind
を使用しtrue
にのみ非ゼロの行の位置を設定することができる。
A = [7 1; 3 2; 4 3];
B = false(max(A(:,1)), max(A(:,2)));
ind = sub2ind(size(B), A(:,1), A(:,2));
B(ind) = true;
最初に行列を割り当て、行列にインデックスを付ける線形インデックスを計算し、最後に正しい位置をtrue
に設定します。ここの出力はsparse
のアプローチと同じです。
ニース!私は 'accumarray(A、1)'も同じ結果を与えることも発見しました。 – dexterdev
@dexterdev実際、それは非常に素晴らしい解決策です。私はそれを考えなかったのは残念です。 – rayryeng
正直言って私はランダムにいくつかのMATLABのヘルプページでこのコマンドにつまずいた。 – dexterdev