-2

私はそのようなテーブルを持っています:

    x   y   Z   w
u1  0   0   2   2
u2  1   0   1   2
u3  3   0   0   3
u4  2   2   5   9
u5  0   3   1   4

2 つの行の重なりを計算したい。私のMatlabコードは次のとおりです。

for j = 1:4
    x = data(j,:);
    for i = j+1:5
        y = data(i,:);
        a = sum(max(x,y));
        b = sum(min(x,y));
        d = sqrt(b);
        over = d/a;
    end
end 

しかし、結果の行間の重複を表示したいですか? たとえば、overlap(1,2)は 1 行目と 2 行目の重なりを表します。等々。結果: オーバーラップ(1,2)=? オーバーラップ(1,3)=? オーバーラップ(1,4)=? ... オーバーラップ(2,3)=? オーバーラップ(2,4)=? ... コードにこの変更を加えるには何が必要ですか? 私はmtarixのようにしたい:

Overlap(1,1)    Overlap(1,2)    Overlap(1,3)    Overlap(1,4)    Overlap(1,5)
 Overlap(1,2)   Overlap(2,2)    Overlap(2,3)    Overlap(2,4)    Overlap(2,5)
 Overlap(1,3)   Overlap(2,3)    Overlap(3,3)    Overlap(3,4)    Overlap(3,5)
 Overlap(1,4)   Overlap(2,4)    Overlap(1,3)    Overlap(4,4)    Overlap(4,5)
 Overlap(1,5)   Overlap(2,5)    Overlap(3,5)    Overlap(4,5)    Overlap(5,5)

得られた値をオーバーラップ(x,y)に置く代わりに。

4

2 に答える 2

1

これを試すことができます。これは、行の各組み合わせで重複する要素の数の行列を返します。

function [ overlap ] = overlap( mat )
[hei, ~] = size(mat);
overlap = zeros(hei);
for i = 1:hei
    for j = 1:hei
        overlap(i,j) = sum(mat(i,:) == mat(j,:));
    end 
end
end

編集:

これはあなたが意味するものですか?

data = [0   0   2   2;
    1   0   1   2;
    3   0   0   3;
    2   2   5   9;
    0   3   1   4];
[hei,~] = size(data);
over = zeros(hei);
for j = 1:hei-1
    x = data(j,:);
    for i = j+1:hei
        y = data(i,:);
        a = sum(max(x,y));
        b = sum(min(x,y));
        d = sqrt(b);
        over(j,i) = d/a;
    end
end
over
于 2013-08-21T15:08:28.940 に答える
0

EitanT が彼の回答を取り上げた理由はわかりませんが、私には正しいように思えました。したがって、この編集版をここに残しておきます:

data= [0   0   2   2
       1   0   1   2
       3   0   0   3
       2   2   5   9
       0   3   1   4]


for j = 1:4
    x = data(j,:);
    for i = j+1:5
        y = data(i,:);
        a = sum(max(x,y));
        b = sum(min(x,y));
        d = sqrt(b);
        over(i-1,j) = d/a;
    end
end 

over =

   0.34641   0.00000   0.00000   0.00000
   0.17678   0.24744   0.00000   0.00000
   0.11111   0.11111   0.11769   0.00000
   0.19245   0.19245   0.15746   0.13925

必要なことは、各オーバーラップ計算をoverマトリックスの異なる要素に保存することだけです

于 2013-08-21T15:02:45.380 に答える