高斯消除 – 使用python中的切片进行旋转

我正在尝试在
Python中实现高斯消除的旋转,并面临一些问题.

def pivot2(matrix,i):
    # matrix is a N*N matrix
    # i is the column I want to start with

    m = matrix.shape[1]
    for n in range(i,m):
        colMax = np.argmax(abs(matrix[n:,i]), axis=0) #rowindex of highest absolute value in column
        if(colMax == 0): #if max in column is in first row, stop
            break;
        tmpRow = copy.copy(matrix[n,:]) #create new object of same row
        matrix[n,:] = matrix[colMax,:]  #overwrite first row with row of max value
        matrix[colMax,:] = tmpRow       #overwrite old row of max value
    return matrix

该代码适用于i = 0就好了.但是对于i = 1,我无法在整列中搜索最大值的索引,因为它显然总是为0.

当我从3×3矩阵切割这个矩阵时:

array([[ 1.,  2.],
       [-3., -2.]])

并使用我的argmax函数,索引是1.但在我的原始矩阵中,同一行的索引是2并且它交换错误的行.我该如何解决?

有没有更简单的方法来实现使用切片的旋转?

最佳答案 检查0后,您只需将i添加到colmax:

...
if(colMax == 0): #if max in column is in first row, stop
    break;
colmax += i   # add this string    
...
点赞