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

Python变量接收矩阵运算结果时出现的简单怪异Bug咨询

Bug原因分析

核心问题是变量赋值顺序错误,后续旋转计算误用了已经修改的新值而非原始值:

  • Print1阶段的三次打印,所有旋转计算的输入都是初始定义的未修改的x/y/z,输入统一所以输出符合预期。
  • 赋值阶段的逻辑存在顺序依赖问题:
    1. 第一行赋值x = (rot_y@rot_x@(np.array([x, y , z ])))[0]时,输入的x/y/z还是初始值,所以得到的新x和Print1的结果一致。
    2. 第二行赋值y = (rot_y@rot_x@(np.array([x, y , z ])))[1]时,输入的x已经是上一步赋值的新值,但由于rot_y@rot_x的第二行第一个元素为0,x的数值变化不会影响第二行的输出结果,因此得到的新y刚好和Print1的结果一致,掩盖了逻辑错误。
    3. 第三行赋值z = (rot_y@rot_x@(np.array([x, y , z ])))[2]时,输入的x和y都已经替换为前两步计算出的新值,而rot_y@rot_x的第三行第一、第二列元素均不为0,输入参数已经和Print1阶段完全不同,因此输出结果出现偏差。

修复方案

一次性完成旋转计算后再赋值,避免中途修改输入参数:

# 先统一用原始值计算全部旋转结果
rotated_arr = rot_y @ rot_x @ np.array([x, y, z])
# 再分别赋值
x = rotated_arr[0]
y = rotated_arr[1]
z = rotated_arr[2]

修改后两次打印的结果就会完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:03