2013-11-29 245 views
2

假設我有一個75x50的零矩陣,其中每個零將被矩陣中某個參考索引的距離所替代,例如每個元素都有一對索引(i, j)告訴我參考點的歐幾里得距離。所以如果參考點在(i = 25,j = 44),我需要計算從其他'i'和'j'到這一點的距離。我可以用一對循環來做到這一點,但由於我的矩陣實際上要大得多,所以我想知道更多,以及如何讓這個速度更快。在Matlab中找到每個矩陣元素的距離

感謝

做到這一點

回答

2

一種方法是使用bsxfunhypot功能。像這樣:

rows = 75; 
cols = 50; 
i=25; 
j=44; 
bsxfun(@hypot, (1:rows)' - i, (1:cols) - j); 

實質上這是做什麼是產生兩個矩陣。其中一個是這樣的:

1 2 3 ... 50 
1 2 3 ... 50 
... 

和其他這樣的:

1 1 1 ... 
2 2 2 
... 
75 75 75 

你可以把這些作爲向量座標。然後,我們從它們中減去ij,使得該點等於零,並且每個其他點給出它們在向量空間中的距離(例如<-2,3>)。然後計算所述向量的長度(因此,例如,<-2,3>將變爲4.0)。它爲矩陣的每個元素都做了這個,然後它成爲你的歐氏距離矩陣。

請注意,這可能不是幕後實際發生的事情,但我覺得這是一個有用的思考方式。

+0

非常感謝。在提供答案之前,我甚至沒有喝過早晨的咖啡:) – user1641496

相關問題