【发布时间】:2021-06-18 18:40:08
【问题描述】:
我有两个大的numpy 数组,我想使用sklearn 计算欧几里得距离。下面的 MRE 在最终结果中实现了我想要的,但由于我的 RL 使用量很大,我真的想要一个矢量化解决方案,而不是使用 for 循环。
import numpy as np
from sklearn.metrics.pairwise import euclidean_distances
n = 3
sample_size = 5
X = np.random.randint(0, 10, size=(sample_size, n))
Y = np.random.randint(0, 10, size=(sample_size, n))
lst = []
for f in range(0, sample_size):
ed = euclidean_distances([X[f]], [Y[f]])
lst.append(ed[0][0])
print(lst)
【问题讨论】:
-
您指定要使用
sklearn来计算距离。这真的有必要吗?如果是这样,那么我认为你会坚持他们给你的东西。如果没有,那么不清楚按照自己的意愿编写自己的文件会有什么麻烦。欧几里得距离不是一个复杂的函数。 -
我可能误解了您想要完成的工作,但
euclidean_distances(X, Y).diagonal()没有做您想做的事吗?如果不是,您能否解释一下这与您想要的有何不同? -
np.sqrt(((X - Y)**2).sum(1))? -
@Brick 是的,我知道,这是针对在线课程的,因此我假设我们将建立在它的复杂性之上。
-
@Brian:行得通!你可以发布一个答案,我会接受吗?
标签: python numpy scikit-learn