Python 如何在numpy中旋转索引数组?
我有一个网格,它是一个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
(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我修改了措辞,现在更清楚了吗?