Domanda

mi sono imbattuto in una soluzione commesso viaggiatore che utilizza Matlab script e nel suo codice, ho scoperto che utilizza una rappresentazione denominata Città Coordinate, che si presenta come:

CityCood = [0.4000,0.2439,0.1707,0.2239,0.5171;0.4439,0.1463,0.2293,0.7610,0.9414]

per 5 città.

A questo punto, sono davvero all'oscuro di come ha fatto l'autore ottiene questa rappresentazione, dal momento che da quello che ho visto finora, le informazioni a portata di mano dovrebbe essere una distanza di 5 * 5 matrice simmetrica che rappresenta tra due qualsiasi di queste cinque città .

Quindi sarei grato se qualcuno mi potrebbe dare un'idea su come funziona rappresentanza coordinata-based. Grazie in anticipo.

È stato utile?

Soluzione

CityCoord (Penso che ci sia una lettera mancante) è una matrice 2-by-5. Presumo questo mezzo thatCityCoord contiene due coordinate (x, y) per ogni singola città.

Per creare una matrice di distanza 5-by-5, è possibile chiamare

squareform(pdist(CityCoord'))

Altri suggerimenti

Se non si dispone del Statistics Toolbox, una forma equivalente alla soluzione fornita da @ Jonas per calcolare la distanza euclidea è:

%# dist(u,v) = norm(u-v) = sqrt(sum((u-v).^2))
D = cell2mat( arrayfun( ...
    @(i) sqrt( sum( bsxfun(@minus, CityCoord, CityCoord(:,i)).^2 ) ), ...
    (1:size(CityCood,2))', ...
    'UniformOutput',false) );

In caso contrario, siamo in grado di utilizzare il fatto che ||u-v||^2 = ||u||^2 + ||v||^2 - 2*u.v implementare un codice ancora più veloce vettorizzati:

X = sum(CityCoord.^2);
D = real( sqrt(bsxfun(@plus,X,X')-2*(CityCoord'*CityCoord)) );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top