Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在numpy中旋转索引数组?_Python_Numpy_Rotation_Image Rotation - Fatal编程技术网

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

Python 如何在numpy中旋转索引数组?,python,numpy,rotation,image-rotation,Python,Numpy,Rotation,Image Rotation,我有一个网格,它是一个numpy数组的形状(522476) 然后,我有另一个numpy数组,它是形状(23866)的单个xy点(网格索引)的轨迹 我使用np.rot90(网格)成功旋转网格。我的问题是如何以相同的方式旋转轨迹,以使各个xy点继续与栅格对齐。您可以定义旋转函数: def rotate(origin, point, angle): """ Rotate a point counterclockwise by a given angle around a given o

我有一个网格,它是一个numpy数组的形状
(522476)

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


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

您可以定义旋转函数:

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)

最佳

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

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

假设
idx
是索引数组(23866),而
n
是要索引的网格(522476)。它只是简单地使用了单个旋转对元素所做的知识,即它将第一维度切换到第二维度,并使第二维度从第一维度的末尾开始计数。

请提供一个答案。您能解释一下
n
在这里的意思吗。我知道你写的是旋转数组。但这意味着什么?@RahatZaman我修改了措辞,现在更清楚了吗?