1

A1年の各日に対して 24 の値 (1 時間ごとに 1 つの値) を含むマトリックスがあります。の各列Aは異なる日であり、各日には 24 行分のデータがあります (Aは 24 行 365 列)。各日の時間データを比較して、各日を比較したい。これを行うには、データの 1 つの列を取得して、次の列と比較します。2 つの列の各時間のデータの差を取り、それらを 2 乗して合計して、2 つの日がどの程度似ているかを示す 1 つの値を取得します。次に、考えられるすべての日の組み合わせでこれを行い、365 行 365 列のマトリックス を作成しdます。これは、各日が他の日とどの程度類似しているかを示します。たとえば、要素d(20,100)年の 20 日が 100 日とどの程度似ているかを示す値が含まれています。コードは機能していますが、非常に遅いため、ベクトル化できるようにしたいと考えています。助けていただければ幸いです。

for j=1:365
    for k=1:365
        d(j,k)=sqrt(sum((A(:,j)-A(:,k)).^2));
    end
end
4

2 に答える 2

4

あなたはhorchler's answerを打ち負かすことはできませんが、完全を期すために、これを使用してこれを行う方法を次に示しますbsxfun

d = bsxfun(@minus, permute(A, [3 2 1]), permute(A, [2 1 3]));
d = sqrt( sum( d.^2, 3 ) );

これを行う別の良い方法は、という事実を使用することです|| x - y || = sqrt(||x||^2-2< x,y >+||y||^2)。したがって

n = sum(A.^2, 1); % norm of each vector
b = bsxfun(@plus, n, n') - 2 * A' * A;
于 2013-07-29T20:31:32.403 に答える