实现一个函数,将给定矩阵转换为简化行阶梯形(Reduced Row Echelon Form, RREF)。
RREF是一种特殊的矩阵形式,具有以下特点:
1. 每行的首个非零元素(主元)为12. 主元所在列的其他元素都为0
3. 每行主元右侧的零行都在非零行之下
函数`rref`接收一个参数:
- matrix:numpy数组表示的矩阵
返回对应的简化行阶梯形,类型为numpy数组。
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[ 1. 0. -1.] [-0. 1. 2.] [ 0. 0. 0.]]
1.对应的输入、输出已给出,您只用实现核心功能函数即可。
2.支持numpy、scipy、pandas、scikit-learn库。
import numpy as np def rref(matrix): A = matrix.astype(np.float32) rows, cols = A.shape for i in range(rows): # 1. 把当前leading entry A[i,i],变成1 if A[i, i] == 0: # 如果当前主元为0 nonzero_id = np.nonzero(A[i:, i])[0] if len(nonzero_id) == 0: continue # 把后续行的非零元素,挪上来 A[i] = A[i] + A[nonzero_id[0] + i] A[i] = A[i] / A[i, i] # 2. 把当前leading entry A[i, i]所在列i的其他元素都变成0 for j in range(rows): if j != i: # 其他行 A[j] -= A[j, i] * A[i] # A[i,i] = 1, 所以 A[j,i] 减完后为0 return A if __name__ == "__main__": print(rref(np.array(eval(input()))))