Python实现Modified Gram-Schmidt算法时SyntaxError语法错误排查
报错原因与代码修正
直接语法错误原因
你代码中R[i,i+1:n]=Q[:.i].T@Q[:,i+1:n]行的语法错误是拼写失误导致:numpy二维数组的行、列索引需要用逗号分隔,你误将Q[:,i](取所有行、第i列)写为了Q[:.i],把逗号写成了英文句号,Python解析器无法识别该语法,因此抛出SyntaxError。将Q[:.i]改为Q[:,i]即可解决当前语法报错。
其他潜在问题修正
你当前代码修复语法问题后运行还会触发其他错误,需同步调整:
- 索引越界问题:Python采用0基索引,n列的数组最后一列索引为
n-1而非n,循环外的R[n,n]、Q[:,n]会触发索引越界错误,需修改为R[n-1,n-1]、Q[:,n-1] - 依赖导入:代码运行需要提前导入numpy和copy模块
- 广播适配:后续矩阵减法操作需要给列向量增加维度适配广播规则,避免维度不匹配报错
修正后完整代码
import numpy as np import copy def mgs(A): m, n = np.shape(A) Q = copy.deepcopy(A) R = np.zeros([n, n]) for i in range(n-1): R[i, i] = np.linalg.norm(Q[:, i]) Q[:, i] = Q[:, i] / R[i, i] # 修复语法错误:将:.改为:, R[i, i+1:n] = Q[:, i].T @ Q[:, i+1:n] Q[:, i+1:n] = Q[:, i+1:n] - Q[:, i, np.newaxis] * R[i, i+1:n] # 修复索引越界:将n改为n-1 R[n-1, n-1] = np.linalg.norm(Q[:, n-1]) Q[:, n-1] = Q[:, n-1] / R[n-1, n-1] return Q, R
内容的提问来源于stack exchange,提问作者장재익
相关产品推荐
相关产品推荐

