繁体   English   中英

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

[英]How to rotate an array of indices in numpy?

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

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

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

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

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

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

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

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)

最好的事物

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM