【发布时间】:2019-12-19 09:38:15
【问题描述】:
我正在尝试在 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 秒的运行时间,是否有更聪明的方法来做到这一点,而无需通过所有矩阵单元进行双循环?
【问题讨论】:
标签: python numpy matrix array-broadcasting