2013-07-29 110 views
1

我有一個矩陣A,它包含一年中每天的24個值(每個小時一個值)。 A的每一列是不同的一天,每天有24行的數據(A是24×365)。我想通過比較每一天的小時數據來比較每一天。要做到這一點,我需要一列數據並將其與下一列進行比較。我將兩個小時中每個小時的數據進行比較,然後對它們進行平方和求和得到一個單值,表示兩天的相似程度。然後,我會在每個可能的天數組合的基礎上做到這一點,創建一個365×365的矩陣,d,指示每天的相似程度如何。例如,元素d(20,100)包含一個值,表示一年中的第20天與第100天的相似程度。代碼正在工作,但速度很慢,我希望能夠對其進行矢量化。幫助將不勝感激。在Matlab中向量化double循環

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

回答

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;