2
假設我有一個75x50的零矩陣,其中每個零將被矩陣中某個參考索引的距離所替代,例如每個元素都有一對索引(i, j)告訴我參考點的歐幾里得距離。所以如果參考點在(i = 25,j = 44),我需要計算從其他'i'和'j'到這一點的距離。我可以用一對循環來做到這一點,但由於我的矩陣實際上要大得多,所以我想知道更多,以及如何讓這個速度更快。在Matlab中找到每個矩陣元素的距離
感謝
做到這一點假設我有一個75x50的零矩陣,其中每個零將被矩陣中某個參考索引的距離所替代,例如每個元素都有一對索引(i, j)告訴我參考點的歐幾里得距離。所以如果參考點在(i = 25,j = 44),我需要計算從其他'i'和'j'到這一點的距離。我可以用一對循環來做到這一點,但由於我的矩陣實際上要大得多,所以我想知道更多,以及如何讓這個速度更快。在Matlab中找到每個矩陣元素的距離
感謝
做到這一點一種方法是使用bsxfun
與hypot
功能。像這樣:
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
你可以把這些作爲向量座標。然後,我們從它們中減去i
和j
,使得該點等於零,並且每個其他點給出它們在向量空間中的距離(例如<-2,3>
)。然後計算所述向量的長度(因此,例如,<-2,3>
將變爲4.0)。它爲矩陣的每個元素都做了這個,然後它成爲你的歐氏距離矩陣。
請注意,這可能不是幕後實際發生的事情,但我覺得這是一個有用的思考方式。
非常感謝。在提供答案之前,我甚至沒有喝過早晨的咖啡:) – user1641496