【问题标题】:How to rotate an array of indices in numpy?如何在numpy中旋转索引数组?
【发布时间】:2019-03-08 13:34:47
【问题描述】:

我有一个网格,它是一个形状为 (522, 476) 的 numpy 数组。

然后我有另一个 numpy 数组,它是形状为 (2, 3866) 的单个 xy 点(网格的索引)的轨迹。

我使用np.rot90(grid) 成功旋转了网格。我的问题是如何以相同的方式旋转轨迹,以使各个 xy 点继续与网格对齐。

【问题讨论】:

标签: python numpy rotation image-rotation


【解决方案1】:

如果你总是想旋转 90 度一次并且总是在同一个方向(所以rot90 没有任何其他参数)你可以使用这个公式:

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

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

【讨论】:

  • 你能解释一下这里的n是什么意思吗?我知道你写的是旋转数组。但这意味着什么?
  • @RahatZaman 我修改了措辞,现在更清楚了吗?
【解决方案2】:

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

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)

最好的

【讨论】:

    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 2014-10-28
    • 2011-09-29
    • 2012-01-03
    • 1970-01-01
    • 2013-06-09
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多