Python 需要删除for循环以使代码矢量化并运行得更快
我有一个学校作业,我必须创建一个分类器(kNN)。我试着这么做,但速度非常慢。我需要在不使用循环的情况下加快速度,但我不确定如何做到这一点。我有培训数据和标签。我还有测试数据 我已经创建了一个函数来执行分类Python 需要删除for循环以使代码矢量化并运行得更快,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个学校作业,我必须创建一个分类器(kNN)。我试着这么做,但速度非常慢。我需要在不使用循环的情况下加快速度,但我不确定如何做到这一点。我有培训数据和标签。我还有测试数据 我已经创建了一个函数来执行分类 label=classifier(train, trainlabel, testvector) 其中train是作为nxm矩阵的训练数据。 trainlabel是mx1的标签。 testvector是一个样本,它是nx1 我必须预测的完整测试数据是一些nxk矩阵。现在我正在创建一个循环来提
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上运行得更快?欢迎使用StackOverflow 正如@hpaulj所说,您需要在分类器中进行优化,使其能够一次对完整矩阵
testdata
进行操作,而不是一次对一列(testvector
)进行操作。然后您的for
循环将替换为
predictions = classifier(train,trainlabel,testdata)
您还可以并行化列向量上的操作,有很多方法可以做到这一点。在普通python中,有一个
多处理
模块可以使这一过程变得非常简单。但是,根据计算密集程度的不同,一种方法可能会胜过另一种方法。欢迎使用StackOverflow
正如@hpaulj所说,您需要在分类器中进行优化,使其能够一次对完整矩阵testdata
进行操作,而不是一次对一列(testvector
)进行操作。然后您的for
循环将替换为
predictions = classifier(train,trainlabel,testdata)
您还可以并行化列向量上的操作,有很多方法可以做到这一点。在普通python中,有一个
多处理
模块可以使这一过程变得非常简单。然而,根据计算密集程度不同的分类器
的不同,一种方法可能胜过另一种方法。如果分类器
一次只能处理一个测试向量
,那么除了此之外,您没有什么可以做的。虽然您可能无法对代码进行向量化,但可以使其并行运行。最简单的方法(如果可行的话)是使用ifclassifier
中的prange
一次只对一个testvector
有效,您没有其他方法可以做。虽然您可能无法对代码进行矢量化,但您可以让它并行运行。最简单的方法(如果可行的话)是从