Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要删除for循环以使代码矢量化并运行得更快_Python_Python 3.x_Numpy - Fatal编程技术网

Python 需要删除for循环以使代码矢量化并运行得更快

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矩阵。现在我正在创建一个循环来提

我有一个学校作业,我必须创建一个分类器(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上运行得更快?

欢迎使用StackOverflow

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

predictions = classifier(train,trainlabel,testdata)

您还可以并行化列向量上的操作,有很多方法可以做到这一点。在普通python中,有一个
多处理
模块可以使这一过程变得非常简单。但是,根据计算密集程度的不同,一种方法可能会胜过另一种方法。

欢迎使用StackOverflow

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

predictions = classifier(train,trainlabel,testdata)

您还可以并行化列向量上的操作,有很多方法可以做到这一点。在普通python中,有一个
多处理
模块可以使这一过程变得非常简单。然而,根据计算密集程度不同的
分类器
的不同,一种方法可能胜过另一种方法。

如果
分类器
一次只能处理一个
测试向量
,那么除了此之外,您没有什么可以做的。虽然您可能无法对代码进行向量化,但可以使其并行运行。最简单的方法(如果可行的话)是使用if
classifier
中的
prange
一次只对一个
testvector
有效,您没有其他方法可以做。虽然您可能无法对代码进行矢量化,但您可以让它并行运行。最简单的方法(如果可行的话)是从