题解|实现简化行阶梯形函数
实现简化行阶梯形(RREF)函数
https://www.nowcoder.com/practice/48380187ac2d412d8defc1e16446744f?tpId=377&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj
简化行阶梯形(RREF)是一种将矩阵化为行阶梯形矩阵的算法,其计算步骤如下:
- 将矩阵的第一个非零元素作为主元,将主元所在的行作为主行,将主元所在的列作为主列。
- 将主行乘以一个常数,使得主元为1。
- 将主行乘以一个常数,使得主行中除了主元以外的元素都为0。
- 将主行乘以一个常数,使得主行中除了主元以外的元素都为0。
- 将主行乘以一个常数,使得主行中除了主元以外的元素都为0。
标准代码如下
def rref(matrix):
# Convert to float for division operations
A = matrix.astype(np.float32)
n, m = A.shape
for i in range(n):
if A[i, i] == 0:
nonzero_rel_id = np.nonzero(A[i:, i])[0]
if len(nonzero_rel_id) == 0: continue
A[i] = A[i] + A[nonzero_rel_id[0] + i]
A[i] = A[i] / A[i, i]
for j in range(n):
if i != j:
A[j] -= A[j, i] * A[i]
return A