5

私は、常に10行で列数が異なるバイナリ行列をmatlabで生成するシミュレーションコードを持っています。

たとえば、次のとおりです。

 1     0     0     0
 0     0     0     0
 0     1     0     0
 1     0     0     0
 1     0     0     0
 1     0     1     0
 0     0     0     1
 1     0     0     0
 0     0     0     0
 0     0     0     0

行間でペアワイズ比較を行い、2 つの行間で異なる要素の数を特定し、最終的に行間の違いの数を含む 10x10 対称行列を作成したいと考えています。例えば。行 1 を行 2 と比較...など。

したがって、この行列の (1,2) 要素 (および 2,1 要素) は行 1 と行 2 を比較し、この場合は 1 つの違いしかないため 1 になります。

これは多くのループコーディングで実行できることは知っていますが、私が知らないもっと簡単な方法があると感じています。

これはどのように達成されるべきですか?

4

1 に答える 1

4

あなたができる外観なしで:

A=[1 0 1; 0 1 1; 1 1 1 ; 0 0 0];
A*(1-A)'+(1-A)*A'
ans =
 0     2     1     2
 2     0     1     2
 1     1     0     3
 2     2     3     0

これは、a=1 かつ b=0 の場合、または a=0 および b=1 の場合 (a*(1-b)+b*(1-a) と同等) とaは異なります。b

結果行列の各エントリには、行 (i,j) 間の差の数が保持されます。行列の乗算を実行することにより、行の任意のペアのすべてのエントリに対して上記を計算し、結果を合計します。

于 2012-10-01T22:08:25.810 に答える