You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现经典Gram-Schmidt矩阵分解时原输入矩阵被意外修改问题

问题原因

你的代码出现这个问题的核心是NumPy数组的视图(View)机制:普通索引/切片获取的数组片段不会生成独立副本,只是原数组的一个引用,对这个片段的原地修改会直接作用到原数组上。

具体到你的代码逻辑里:
你在循环中写了v_i = A.T[i],A.T是原数组的转置,A.T[i]对应的就是原数组A的第i列,这行代码并没有生成新的数组,只是得到了原A第i列的引用。后续你执行v_i -= np.inner(Q.T[j], A.T[i]) * Q.T[j]是对v_i的原地修改操作,相当于直接修改了原数组A的对应列,所以两次打印A的结果会出现差异。

修复方案

只需要在获取v_i的时候主动创建独立副本即可,将对应代码行修改为:

v_i = A.T[i].copy()

修改后对v_i的所有操作都只会作用在副本上,不会修改原数组A,两次打印的结果就会一致了。

内容的提问来源于stack exchange,提问作者AABBCC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:15:03