首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2表上的Numpy三维变换

2表上的Numpy三维变换
EN

Stack Overflow用户
提问于 2022-10-11 12:48:56
回答 2查看 41关注 0票数 0

我有一个二维点的变换矩阵,因此它有一个形状(3,3)。例如:

代码语言:javascript
复制
array([[2., 0., 0.],
       [0., 2., 0.],
       [0., 0., 1.]])

编辑:,这只是一个例子。实际转换可以包含转换,因此必须具有此大小。

我有一个带有形状的2D点的列表(,2),我想用变换矩阵进行变换。

乘法应该用左边的矩阵。所以

代码语言:javascript
复制
my_matrix @ my_point

我想要让这件事在numpy中发挥作用,我需要两件事:

  • 转置2d点列表
  • 通过向每个点

添加z值1使所有2d点都是三维的。

我怎么能用一种简单的方法来处理这个问题呢?

结果应该是一个2d点的列表,类似于输入。因此,伪代码可能类似于:

代码语言:javascript
复制
(matrix @ points.T.add_z_dimension()).T[:-1]

将转置点添加为1的z维,执行转换,将其转换回并切片z维。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-11 13:06:29

假设矩阵是M,而向量列表是v,最简单的解决方案是:

代码语言:javascript
复制
(M @ np.hstack((v, np.ones((v.shape[0], 1)))).T).T[..., :2]
票数 2
EN

Stack Overflow用户

发布于 2022-10-11 13:08:04

如果您想要准确地执行所描述的操作,可以在numpy.pad模式下使用值为1的'constant'函数。

代码语言:javascript
复制
padded_points = numpy.pad(points, [(0, 0), (0, 1)], mode='constant', constant_values=1)

另一种选择是叠加一个向量。

代码语言:javascript
复制
padded_points = numpy.hstack([points, numpy.ones((points.shape[0], 1))])

但你的转变似乎不太自然。如果z维不依赖,则应该考虑转换矩阵my_matrix[:2, :2]的裁剪版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74028437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档