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, или это лучший способ структурировать эти данные? Мне все еще нужно хранить «дубликаты» в обоих порядках для других функций.