求两个矩阵所有行向量之间的欧氏距离

假设有两个矩阵行数不同,维度相同,如A.shape = (500,300),B.shape = (200000,300),希望求出所有行向量之间的曼哈顿距离,输出一个矩阵M,Mij表示A中第i个行向量与B中第j个行向量的曼哈顿距离,M.shape=(500,200000)。我想到使用双循环
import numpy as np

def Manhadun(x,y):
return np.sum(np.abs(x-y))

def ManhadunMatrix(x,y):
M = np.empty((x.shape[0],y.shape[0]))
for i in range(x.shape[0]):
for j in range(y.shape[0]):
M[i][j] = Manhadun(x[i],y[j])
return M
但是双循环的速度太慢了,请问有没有更快的方法呢?直接对矩阵操作应该更快,但是没有思路。希望有人帮忙

改进了一下,应该会快一点,但测试了下也要4min多

import numpy as np
import time

def Manhadun(x,y):
    return np.sum(np.abs(x-y))

def ManhadunMatrix(x,y):
    M = np.empty((x.shape[0],y.shape[0]))
    for i in range(x.shape[0]):
        for j in range(y.shape[0]):
            M[i][j] = Manhadun(x[i],y[j])
    return M

def ManhadunMatrix_(x, y):
    return np.array([np.sum(np.abs(x[i, :] - y), axis = 1) for i in range(x.shape[0])])

if __name__ == '__main__':
    A = np.random.randn(500, 300)
    B = np.random.randn(200000, 300)
    
    start = time.time()

    M1 = ManhadunMatrix_(A, B)

    print(time.time() - start)  # 259.9257025718689