没有双 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)
我正在使用两个 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)