Я пытаюсь запустить индексирование тройной матрицы в NumPy, и хотя мой код, похоже, делает то, что я хочу, мне интересно, есть ли более эффективный способ, поскольку время выполнения слишком велико для больших матриц.
У меня есть две матрицы numpy, содержащие время в пути между парами отправления и назначения, первая из которых предназначена для этапа поездки 1 (от i до k), вторая для этапа поездки 2 (от k до j). Я хочу создать две новые матрицы:
- первая матрица, содержащая минимальное время в пути для каждой пары i-j (т.е. наименьшее время для i до k + k до j)
- вторая матрица, показывающая индекс оптимальной k промежуточной остановки, которая вернула это минимальное время в пути.
Мой код выглядит следующим образом:
nb_zones = 100
leg1 = np.random.rand(nb_zones,nb_zones)
leg2 = np.random.rand(nb_zones,nb_zones)
# initialise result matrices
total = np.zeros((nb_zones,nb_zones))
index = np.zeros((nb_zones,nb_zones))
# triple index calcs
for a in range(nb_zones):
for b in range(nb_zones):
# max
total[a,b] = np.min(leg1[a] + leg2[:,b])
# index
index[a,b] = np.argmin(leg1[a] + leg2[:,b])
При количестве зон 800 это приводит к времени выполнения до 30 секунд, есть ли более умный способ сделать это без двойного цикла по всем ячейкам матрицы?