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

Python中如何接收多组(X Y Z)输入并存储为numpy列数组用于矩阵变换

多组3D列向量的存储与矩阵变换计算(基于NumPy)

一、接收多组输入并存储

推荐方案:二维数组转置(高效省内存)

不需要用三维数组,把多组点的坐标先存为(n, 3)的二维数组(每行对应一个点的x/y/z),再转置为(3, n)的数组——此时每一列就是一个(3,1)的列向量,完全满足需求,且NumPy对二维数组的运算优化更到位。

示例代码:

import numpy as np

# 模拟多组输入(可替换为从文件/用户输入读取的列表)
raw_points = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 转置后得到(3, n)的数组,每一列对应一个(3,1)的点
points_col = np.array(raw_points).T

可选方案:三维数组存储(按需使用)

如果一定要让每个点都是独立的(3,1)数组,可以创建(n, 3, 1)的三维数组,但会额外占用内存,后续计算需要注意维度匹配。

示例代码:

points_3d = np.array([[[1],[2],[3]], [[4],[5],[6]], [[7],[8],[9]]])

二、矩阵变换计算

基于二维数组(推荐)

假设你的变换矩阵M是(3,3)的标准方阵,直接用@运算符(或np.matmul)做矩阵乘法,一次就能完成所有点的变换,结果依然是(3, n)的数组,每一列是变换后的列向量。

示例代码:

# 定义一个3x3的变换矩阵(比如绕Z轴旋转90度)
theta = np.pi / 2
transform_matrix = np.array([
    [np.cos(theta), -np.sin(theta), 0],
    [np.sin(theta), np.cos(theta), 0],
    [0, 0, 1]
])

# 批量变换所有点
transformed_points = transform_matrix @ points_col

基于三维数组

利用NumPy的广播机制,直接用矩阵乘法即可完成批量运算,结果为(n, 3, 1)的三维数组,每个元素是变换后的独立列向量。

示例代码:

transformed_3d = transform_matrix @ points_3d

三、参考资料

  • NumPy官方文档:重点理解numpy.dot、numpy.matmul和@运算符的差异,以及多维数组的广播规则,这些是批量矩阵运算的核心。
  • 《Python数据分析基础教程:NumPy学习指南》:书中有针对多维数组存储、矩阵变换的实操案例,适合结合代码理解线性代数运算逻辑。
  • 线性代数基础教材:巩固列向量与矩阵乘法的基本规则,这是理解变换逻辑的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:45:53