Python 改进线性搜索的KNN效率w/NumPY

Python 改进线性搜索的KNN效率w/NumPY,python,numpy,machine-learning,Python,Numpy,Machine Learning,我试图计算测试集中每个点与训练集中每个点之间的距离: 这就是我的循环现在的样子: for x in testingSet for y in trainingSet print numpy.linalg.norm(x-y) 其中testingSet和trainingSet是numpy数组,其中两个集合中的每一行保存一个示例的特征数据 但是,由于我的数据集比较大(测试集3000,训练集10000),所以运行速度非常慢,需要10分钟以上。这是否与我的方法有关,或者我是否错误

我试图计算测试集中每个点与训练集中每个点之间的距离:

这就是我的循环现在的样子:

 for x in testingSet
    for y in trainingSet
        print numpy.linalg.norm(x-y)
其中testingSet和trainingSet是numpy数组,其中两个集合中的每一行保存一个示例的特征数据


但是,由于我的数据集比较大(测试集3000,训练集10000),所以运行速度非常慢,需要10分钟以上。这是否与我的方法有关,或者我是否错误地使用了numPY?

这是因为您天真地迭代数据,而python中的循环速度很慢。相反,使用sklearn,或者更好的-使用sklearn搜索(比如BallTree或KDTree)。如果您不想使用sklearn,还有一个。最后你可以用“矩阵技巧”来计算,因为

|| x - y ||^2 = <x-y, x-y> = <x,x> + <y,y> - 2<x,y>

这是因为您天真地迭代数据,而python中的循环速度很慢。相反,使用sklearn,或者更好的-使用sklearn搜索(比如BallTree或KDTree)。如果您不想使用sklearn,还有一个。最后你可以用“矩阵技巧”来计算,因为

|| x - y ||^2 = <x-y, x-y> = <x,x> + <y,y> - 2<x,y>

回答得真好+回答得非常好+1.