Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 用numpy加速高斯消去步_Python_Performance_Numpy - Fatal编程技术网

Python 用numpy加速高斯消去步

Python 用numpy加速高斯消去步,python,performance,numpy,Python,Performance,Numpy,我目前正致力于实现单纯形算法,目前我想加快这个过程 在我使用的高斯消去步骤中 # gausian elimination rang = list(range(0,leaving_row)) rang.extend(range(leaving_row+1,self.matrix.shape[0])) facs = -self.matrix[:, entering] / self.matrix[leaving_row, entering] facs[leav

我目前正致力于实现单纯形算法,目前我想加快这个过程

在我使用的高斯消去步骤中

    # gausian elimination
    rang = list(range(0,leaving_row))
    rang.extend(range(leaving_row+1,self.matrix.shape[0]))

    facs = -self.matrix[:, entering] / self.matrix[leaving_row, entering]
    facs[leaving_row] = 0
    for row in rang:
        self.matrix[row] += facs[row] * self.matrix[leaving_row]

    self.matrix[leaving_row] /= self.matrix[leaving_row, entering]
它基本上是一个高斯步,即
离开行
进入列的末尾有一个1

有没有办法加快for循环的速度?这里有没有使用矩阵乘法的奇特方法

谢谢你事先提出的任何想法

我的矩阵形状是: (11052107)

其中一个高斯消除器在我的笔记本电脑上大约需要0.009秒。我希望能够在更大的实例上使用我的程序,因此我希望尽可能加快速度

编辑 我还尝试通过以下方式替换循环:

l_r = self.matrix[leaving_row]
l_r_m = np.broadcast_to([l_r],self.matrix.shape)
self.matrix += l_r_m*facs[:,np.newaxis]

这似乎要快一点(大约0.007而不是0.009),但使用这个巨大的
broadcast\u to
函数也显得很奇怪。

您是否尝试过使用
self.matrix+=facs[:,np.newaxis]*self.matrix[离开行,np.newaxis,:]进行隐式广播
?看起来它有相同的时间,但看起来有点不错。我不认为你会从中获得更多的速度。看起来您不需要按
铃,这可能会很慢。你也可以试着预先分配
facs
。你试过使用
self.matrix+=facs[:,np.newaxis]*self.matrix[leaving_row,np.newaxis,:]
进行隐式广播吗?看起来它的计时相同,但看起来有点不错。我认为你不会从中获得更多的速度。看起来您不需要按铃,这可能会很慢。您还可以尝试预先分配
facs