Python 2.7 两个矩阵之间的最短路径

Python 2.7 两个矩阵之间的最短路径,python-2.7,numpy,pandas,matrix,networkx,Python 2.7,Numpy,Pandas,Matrix,Networkx,我有两个变量名重叠的距离矩阵 dfA: dfB: 因此,从A1、A2等开始,通过ABC,有到X、Y和Z的路径 我想看看一个项目的最短路径是什么,例如A1->Z组合。我通过加载带有距离矩阵的csv并取消堆叠来编程。然后使用df.itetrows()和两个for循环遍历可能的组合,并查看组合A1->Z的最小值 但因为我要为大约30000件物品做这个,所以要花很长时间 有人知道如何用矢量化的方式来做吗 我添加了D,这样轴的长度就不同了(dfB不是方阵),只是为了方便(它也适用于方阵) dfA: dfB

我有两个变量名重叠的距离矩阵

dfA:

dfB:

因此,从A1、A2等开始,通过ABC,有到X、Y和Z的路径

我想看看一个项目的最短路径是什么,例如A1->Z组合。我通过加载带有距离矩阵的csv并取消堆叠来编程。然后使用df.itetrows()和两个for循环遍历可能的组合,并查看组合A1->Z的最小值

但因为我要为大约30000件物品做这个,所以要花很长时间


有人知道如何用矢量化的方式来做吗

我添加了
D
,这样轴的长度就不同了(
dfB
不是方阵),只是为了方便(它也适用于方阵)

dfA:

dfB:

dfC:


添加了networkx标签,可能会对此类路径相关问题有所帮助。啊,我忘了,谢谢!是否保证只需两个步骤?从A1到B到A3到C到X从来都不是一件好事?看起来真的是这样:“将第一个矩阵的列添加到第二个矩阵的对应行,然后找到最小元素”numpy有办法做到所有这些(但我不是专家,所以我不得不用谷歌来解决)。顺便说一句,当你发布了一个问题,你会收到关于任何评论的通知。然而,没有其他人会得到通知。如果你是在回答某人的问题,在评论的开头使用@username是很有用的。然后他们会得到警报。
    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
    A   B   C           
X   4   12  32          
Y   1   6   12          
Z   2   8,5 11
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)
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
    A   B   C   D
X   4   12  32  11,4
Y   1   6   2  9,3
Z   2   8,5 11  1,4
  A1 A2 A3 A4 A150
X  A  A  A  A    A
Y  C  A  C  A    B
Z  D  D  D  A    D