numpy матрица расстояний, итерация индекса в порядке значений без обоих [i, j] и [j, i] - PullRequest
1 голос
/ 28 марта 2020
distance_matrix = np.array([[0,2,3,2],
                            [2,0,5,8],
                            [3,5,0,4],
                            [2,8,4,0]])


sorted_numpy_idx = np.argsort(distance_matrix, axis=None)
idx_to_iterate = np.column_stack(np.unravel_index(sorted_numpy_idx[::], distance_matrix.shape))
print(idx_to_iterate)

[[0 0]  [1 1]  [2 2]  [3 3]  [0 1]  [0 3]  [1 0]  [3 0]  [0 2]  [2 0] [2 3]  [3 2]  [1 2]  [2 1]  [1 3]  [3 1]]

строка и столбцы упорядочены с местоположением A -> D, поэтому:

Расстояние между A и A равно distance_matrix[0:0]

Расстояние между A и B равно distance_matrix[0:1]

Расстояние между B и A равно distance_matrix[1:0]

  • Расстояние между точками расположения (A, A) всегда будет 0, и это будет единственным значением это 0.

  • Обратное расстояние всегда будет одинаковым ie. A-> B == B-> A, но будут разные значения расстояния между различными парами местоположений, т.е. в этом примере A-> B = 2, A-> D = 2.

  • Порядок строк и столбцов важен, так как я использую этот индекс для ссылки на другие данные.

Я хочу перебрать пары индексов на основе порядка значений (как указано выше), но исключая 0 значений (менее важно) и избегая «дубликатов», таких как [0,1] и [1,0], так как они оба ссылаются на одну и ту же пару местоположений (A-> B и B-> A), мне просто нужно одно из эти, но не оба.

Есть ли способ уменьшить idx_to_iterate с помощью numpy, или это лучший способ структурировать эти данные? Мне все еще нужно хранить «дубликаты» в обоих порядках для других функций.

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