需要删除for循环以向量化代码并更快地运行

时间:2019-02-17 20:16:54

标签: python python-3.x numpy

我有一个学校作业,必须创建一个分类器(kNN)。我尝试这样做,它非常慢。我需要在不使用循环的情况下加快速度,但是我不确定该怎么做。我有训练数据和标签。我也有测试数据。

我已经创建了执行分类的功能。

label=classifier(train, trainlabel, testvector)

其中train是训练数据,它是一个nxm矩阵。 trainlabel是mx1的标签。 testvector是单个样本,为nx1。

我必须预测的完整测试数据是一些nxk矩阵。现在,我正在创建一个循环以提取列并将其传递到我的分类器中。请参见下面的代码。

for i in range(0, numoftestsamples):
    testvector=testdata[:,i]
    predictions[i]= classifier(train, trainlabel, testvector)

有什么方法可以向量化它,使其在python上运行更快?

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!

如@hpaulj所说,您需要在分类器中进行优化,以使其一次对完整矩阵testdata进行操作,而不是一次对列(testvector)进行操作。 。然后,您的for循环将替换为

predictions = classifier(train,trainlabel,testdata)

您还可以并行化对列向量的操作,并且有多种方法可以做到这一点。停留在香草python中,有一个multiprocessing模块可以使这一过程变得非常简单。但是,根据计算密集型classifier的程度,一种方法可能会胜过另一种方法。