没有双 for 循环的两个 python 矩阵之间的欧氏距离?

Euclidian distance between two python matrixes without double for-loop?

我正在使用两个 numpy 矩阵,U维度 Nu x 3)和 M尺寸 3 x Nm

A 包含 Nu 个用户和 3 个特征

M 包含 Nm 部电影(以及相同的 3 个特征)

对于 U 的每个用户,我想计算它到 M 中每部电影的欧几里德距离(所以我需要计算Nu*Nm 欧氏距离)。

如果没有显式的双 for 循环,这可能吗?我正在处理大尺寸矩阵,双 for 循环可能会花费太多时间。

提前致谢。

恐怕不会。您需要计算每对 (user, movie) 的欧氏距离,因此您的时间复杂度为 numOfUsers * numOfMovies,这将是一个双循环。你不能做比这更少的操作,除非你愿意跳过一些对。您能做的最好的事情就是优化欧几里德距离计算,但是您将要执行的操作数量将以某种方式二次方。

查看 scipy.spatial.distance.cdist。这样的事情会做:

from scipy.spatial.distance import cdist
dist = cdist(U, M.T)