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

时间:2019-03-08 13:34:47

标签: python numpy rotation image-rotation

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以定义旋转功能:

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)

最佳

答案 1 :(得分:1)

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

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

假设idx是索引数组,而n是旋转数组。它只是利用了对元素进行一次旋转的知识,即将第一维转换为第二维,并使从末端算起的第二维成为第一维。