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
相关产品推荐
相关产品推荐

