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

如何用NumPy高效利用旋转矩阵计算圆周新坐标(规避循环)

用纯矩阵运算实现单点绕X轴多角度旋转的坐标计算

优化后的代码

import numpy as np

# 总旋转角度
th = np.pi
# 初始点坐标
ori = np.array([1, 1, 0])
# 步数
step = 10 

# 生成所有旋转角度
angles = np.linspace(0, th, step)

# 计算所有角度的cos和sin值,利用numpy向量化运算
cos_angles = np.cos(angles)
sin_angles = np.sin(angles)

# 构建三维旋转矩阵数组,形状为(step, 3, 3)
# 注:原代码中的旋转矩阵实际是绕Z轴的,若需绕X轴,可替换下方矩阵构造逻辑
rot_matrices = np.zeros((step, 3, 3))
rot_matrices[:, 0, 0] = cos_angles
rot_matrices[:, 0, 1] = -sin_angles
rot_matrices[:, 1, 0] = sin_angles
rot_matrices[:, 1, 1] = cos_angles
rot_matrices[:, 2, 2] = 1

# 一次性完成所有旋转计算,利用numpy广播机制
coords = ori @ rot_matrices

print(coords)

关键思路说明

  • 向量化计算三角函数:直接对整个angles数组批量计算cos和sin,避免循环中逐个计算,充分利用numpy的底层优化。
  • 三维旋转矩阵数组:构造形状为(step, 3, 3)的数组,每个切片rot_matrices[i]对应第i个角度的旋转矩阵,实现所有旋转矩阵的一次性构建。
  • 广播式矩阵乘法:将初始点ori(形状(3,))与三维旋转矩阵数组相乘,numpy会自动广播维度,一次性得到所有旋转后的坐标(形状(step, 3)),完全规避循环。

补充:绕X轴的正确旋转矩阵

若你确实需要绕X轴旋转,替换旋转矩阵的构造逻辑为:

rot_matrices = np.zeros((step, 3, 3))
rot_matrices[:, 0, 0] = 1
rot_matrices[:, 1, 1] = cos_angles
rot_matrices[:, 1, 2] = -sin_angles
rot_matrices[:, 2, 1] = sin_angles
rot_matrices[:, 2, 2] = cos_angles

原代码的小问题修正

原代码中初始coords已包含初始点,而循环又处理了angle=0(对应单位矩阵,结果还是初始点),导致最终结果中初始点重复出现。优化后的代码直接基于angles生成所有结果,无重复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:23:15