Создать матрицу смежности рассчитать расстояние между многими городами - PullRequest
0 голосов
/ 04 марта 2019

У меня в настоящее время есть данные, подобные этим

                   0                     1        2
0   Ho Chi Minh City               Dalat   1146.72
1  Ho Chi Minh City               Mui Ne    220.00
2  Mui Ne                         Dalat    340.00

Я хочу создать матрицу, которая может отображать двойной массив, такой как

                     HCM                Dalat        Mui Ne
    HCM               0                 1146.72       220
    Dalat             1146.72           0             340
    Mui Ne            220               340           0

В моем datafarme есть больше городов.Я могу понять матрицу смежности, однако не знаю, как отобразить матрицу смежности, и код может понять, что HCM к HCM равен 0.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вот быстрый способ сделать это с помощью numpy:
В следующем коде d - это пустой массив расстояний, как в кадре данных, а n - количество городов.

d = np.array([1146.72, 220, 340])
n = 3

upperIndices = np.triu_indices(n, k=1)
lowerIndices = np.tril_indices(n, k=-1)

distanceMatrix = np.zeros((n,n))
distanceMatrix[upperIndices] = d
distanceMatrix[lowerIndices] = d

Результат:

array([[   0.  , 1146.72,  220.  ],
       [1146.72,    0.  ,  340.  ],
       [ 220.  ,  340.  ,    0.  ]])

Обратите внимание, что это будет работать только в том случае, если список расхождений упорядочен правильно.

0 голосов
/ 04 марта 2019
  1. Сначала создайте список со всеми разными городами.
  2. Количество элементов в вашем списке как n
  3. Создайте массив numy как x = np.zeros((n,n))
  4. ДляДля каждой записи в вашем фрейме данных найдите индексы городов из списка.Позвольте мне обозначить как i, j и расстояние как d, а затем обновить x[i,j]=d

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...