我有两个重叠变量名称的距离矩阵。
DFA:
Start A1 A2 A3 A4 … A150
Location
A 12 4 12 2 9
B 5 2 19 4 3
C 1 4 8 7 12
DFB:
A B C
X 4 12 32
Y 1 6 12
Z 2 8,5 11
因此从A1,A2等开始到ABC,有到X,Y和Z的路径
我想看看项目的最短路径是什么,例如组合A1 - > Z.我通过用距离矩阵加载csv并对它们进行拆分来编程。然后使用df.itterows()和两个for循环遍历可能的组合,并查看组合A1的最小值 - > ž。
但是因为我必须为大约30000件物品做这件事,所以需要很长时间。
有人知道如何以矢量化的方式做到这一点吗?
答案 0 :(得分:0)
我添加D
以便轴长度不同(dfB
不是方阵),仅为方便起见(它也适用于方形矩阵)。
import pandas as pd
import numpy as np
df_a = pd.read_csv('dfA.csv', delim_whitespace=True, index_col=0, decimal=",")
df_b = pd.read_csv('dfB.csv', delim_whitespace=True, index_col=0, decimal=",")
mat_a = df_a.values
mat_b = df_b.values
mat_a2 = np.expand_dims(mat_a, axis=2)
mat_b2 = np.expand_dims(mat_b.T, axis=1)
mat_a3 = np.tile(mat_a2, (1, 1, mat_b.shape[0]))
mat_b3 = np.tile(mat_b2, (1, mat_a.shape[1], 1))
tot = mat_a3 + mat_b3
ind = np.argmin(tot, axis=0).T
df_c = pd.DataFrame(df_b.columns.values[ind], columns=df_a.columns, index=df_b.index)
print(df_c)
DFA:
Start_Location A1 A2 A3 A4 A150
A 12 4 12 2 9
B 5 2 19 4 3
C 1 4 8 7 12
D 5 2 9 11 4
DFB:
A B C D
X 4 12 32 11,4
Y 1 6 2 9,3
Z 2 8,5 11 1,4
DFC:
A1 A2 A3 A4 A150
X A A A A A
Y C A C A B
Z D D D A D