为了账号安全,请及时绑定邮箱和手机立即绑定

如何在numpy中旋转索引数组?

如何在numpy中旋转索引数组?

慕勒3428872 2021-11-30 16:01:58
我有一个网格,它是一个形状为 numpy 的数组(522, 476)。然后我有另一个 numpy 数组,它是 shape 的单个 xy 点(网格的索引)的轨迹(2, 3866)。我使用np.rot90(grid). 我的问题是如何以相同的方式旋转轨迹,以便各个 xy 点继续与网格对齐。
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

如果您总是只想旋转 90 度并且始终保持相同的方向(因此rot90没有任何其他参数),您可以使用以下公式:

idx2 = np.array([[n.shape[0]-1-x[1], x[0]] for x in idx])

假设idx是您的索引数组 (2, 3866) 和n您想要索引的网格 (522, 476)。它只是使用单次旋转对元素的作用的知识,即将第一维切换到第二维,并使第二维从末尾开始计算为第一维。


查看完整回答
反对 回复 2021-11-30
?
精慕HU

TA贡献1845条经验 获得超8个赞

您可以定义一个旋转函数:


def rotate(origin, point, angle):

    """

    Rotate a point counterclockwise by a given angle around a given origin.


    The angle should be given in radians.

    """

    ox, oy = origin

    px, py = point


    qx = ox + math.cos(angle) * (px - ox) - math.sin(angle) * (py - oy)

    qy = oy + math.sin(angle) * (px - ox) + math.cos(angle) * (py - oy)

    return qx, qy

然后将此函数应用于轨迹的所有 (X,Y) 点。


origin = tuple(0, 0)

newTrajectory = []

for i in range(0:len(trajectory[0])):

    p = tuple(trajectory[i][0], trajectory[i][1])

    newP = rotate(origin, p, math.pi/2)

    row = [newP[0], newP[1]]

    newTrajectory.append(row)

最好的事物


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信