0

所以我需要让径向基函数运行得更快一点

    while(error):
        epoch += 1
        error = 0
        for i in xrange(self.numPoints):
            dp = self.dotProduct(g[i], self.weights)
            signum = self.sig(dp)
            if dp < 0 and g[i].classification == 1:
                self.updateWeights(signum, g[i])
                error += 1
            elif dp > 0 and g[i].classification == -1:
                self.updateWeights(signum, g[i])
                error += 1
            elif dp == 0:
                self.updateWeights(signum, g[i])
                error += 1
        if epoch > 10000:
            return 0
    print "Epochs %i, %i Dimensions" % (epoch, self.numWeights - 1)
    return 1

def dotProduct(self, x, y):
    ret = 0.0
    for i in xrange(len(y)):
        ret += x.points[i]*y[i]
    return ret

def sig(self, x):
    if x < 0:
        return 1
    if x > 0:
        return -1
    else:
        return 0

def updateWeights(self, s, g):
    for i in xrange(self.numWeights):
        self.weights[i] = self.weights[i] + self.learningRate * s * g.points[i]

我想使用并发线程,但python线程锁定线程,直到前一个线程完成,所以它不会使它比运行单个主线程更快。

我需要找到一种同时运行线程的方法,每个线程都有一个线程:for i in xrange(self.numPoints): 但是锁定 self.weights 的值,这意味着一次只有一个线程可以更改它们。

任何人都知道如何做到这一点?

这在小型数据集上效果很好,但是在使用真实数据时会有点麻烦

4

2 回答 2

2

您可以使用 numpy 数组来提高性能,例如:

import numpy as np

def dotProduct(self, x, y):
    return np.dot(x.point, y)

def updateWeights(self, s, g):
    self.weights += self.learningRate * s * g.points

其中x.point, y, self.weights,g.points是一维 numpy 数组。

于 2013-03-03T15:19:09.597 回答
0

Python 多线程在一个 CPU 内核上的单个进程中运行所有线程。

要运行真正的并行线程,您应该使用多处理库。

于 2013-03-03T11:55:46.077 回答