【发布时间】:2015-12-10 23:45:35
【问题描述】:
给定一个旋转角度列表(让我们说一下 X 轴):
import numpy as np
x_axis_rotations = np.radians([0,10,32,44,165])
我可以通过这样做创建一个匹配这些角度的矩阵数组:
matrices = []
for angle in x_axis_rotations:
matrices.append(np.asarray([[1 , 0 , 0],[0, np.cos(angle), -np.sin(angle)], [0, np.sin(angle), np.cos(angle)]]))
matrices = np.array(matrices)
这可行,但它没有利用 numpy 处理大型数组的优势......所以如果我的角度数组有数百万,这样做不会很快。
有没有更好(更快)的方法从输入数组创建变换矩阵数组?
【问题讨论】:
-
如果我理解正确的话,你想要一个 3D 数组吗?输入来自哪里?文件或您在运行时生成的东西?
-
您能解释一下为什么要存储矩阵而不是在使用时计算它们的原因吗?
-
@Simpom 我想实现this paper 中概述的点到三角形技术。这个想法是,通过为网格的每个三角形预先计算一个变换矩阵,可以将点到三角形的 3D 距离问题减少为更简单的 2D 问题,这可以比通过重心计算更快地计算。如果我想要的只是单点查询,那么是的,不需要计算矩阵。但是,如果我有一百万个点要查询,那么这应该很有用。
-
@ventsyv 我想创建一个 4x4 矩阵的数组。阅读我刚刚写给 Simpom 的评论,了解我想要的特定用例。输入来自外部程序,形式为描述三角形网格的顶点位置数组,以及用于查询网格上最近点的 3d 点数组。
标签: python arrays performance numpy matrix