可能会提高代码的效率

来源:6-8 实现更一般化的高斯-约旦消元法

GeXeLr

2018-12-18

def _forward(self):

    i, k = 0, 0
    while i < self._m and k < self._n:
        # 看Ab[i][k]位置是否可以是主元
        max_row = self._max_row(i, k, self._m)
        self.Ab[i], self.Ab[max_row] = self.Ab[max_row], self.Ab[i]

        if is_zero(self.Ab[i][k]):
            k += 1
        else:
            # 将主元归为一
            self.Ab[i] = self.Ab[i] / self.Ab[i][k]
            for j in range(i + 1, self._m):
                self.Ab[j] = self.Ab[j] - self.Ab[j][k] * self.Ab[i]
            self.pivots.append(k)
            i += 1
            # k+=1    需要在这里加上这一句吗???

老师,这个_forward函数下一轮循环会在已经主元处理过的那一列的下一行开始寻找主元,找到的一定是0,相当于空转了一轮循环。所以else分支加上k+=1这个语句是不是效率会更高?

写回答

1回答

liuyubobobo

2018-12-18

你是对的。应该加上。


其实应该是我忘记加了。但是正好不加k+=1,逻辑也是正确的,只是空转一轮,在is_zero的if分支下,k进行了+1操作= =


非常抱歉!


继续加油!:)

0
1
GeXeLr
非常感谢!
2018-12-18
共1条回复

结合编程学数学 专为程序员设计的线性代数

创新设计,通俗易懂。编程结合数学,bobo带你彻底征服线性代数

3460 学习 · 376 问题

查看课程