按角度 theta 旋转数据
Rotating data by angle theta
可能是一个简单的问题,但假设你有二维法线数据,你想逆时针旋转 90 度,为此你可以使用 rotation matrices 并用 theta = np.pi / 2
构造一个,然后将数据乘以旋转矩阵。这很好用,但是当我尝试将数据旋转 45 度 (np.pi / 4
) 时,它不起作用。它似乎顺时针旋转了数据,但翻转角度的符号不会改变结果图。如何将数据逆时针旋转45度?
cov = np.array([[1, .7], [.7, 1]])
data = np.random.multivariate_normal(np.zeros(2), cov, size=10000)
theta = np.pi / 4
rot_matrix = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
data_rot = (rot_matrix @ data.T).T
fig, axes = plt.subplots(2)
axes[0].scatter(data[:, 0], data[:, 1])
axes[1].scatter(data_rot[:, 0], data_rot[:, 1])
fig.show()
生成图像:
(而我预计逆时针旋转 45 度会使数据看起来像一条垂直线)同时将 theta 更改为 np.pi / 2
会产生正确的图像:
你的旋转矩阵是正确的。 matplotlib 的自动缩放使旋转看起来好像是错误的。尝试在 fig.show()
之前添加这些
axes[0].set_aspect("equal")
axes[1].set_aspect("equal")
可能是一个简单的问题,但假设你有二维法线数据,你想逆时针旋转 90 度,为此你可以使用 rotation matrices 并用 theta = np.pi / 2
构造一个,然后将数据乘以旋转矩阵。这很好用,但是当我尝试将数据旋转 45 度 (np.pi / 4
) 时,它不起作用。它似乎顺时针旋转了数据,但翻转角度的符号不会改变结果图。如何将数据逆时针旋转45度?
cov = np.array([[1, .7], [.7, 1]])
data = np.random.multivariate_normal(np.zeros(2), cov, size=10000)
theta = np.pi / 4
rot_matrix = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
data_rot = (rot_matrix @ data.T).T
fig, axes = plt.subplots(2)
axes[0].scatter(data[:, 0], data[:, 1])
axes[1].scatter(data_rot[:, 0], data_rot[:, 1])
fig.show()
生成图像:
(而我预计逆时针旋转 45 度会使数据看起来像一条垂直线)同时将 theta 更改为 np.pi / 2
会产生正确的图像:
你的旋转矩阵是正确的。 matplotlib 的自动缩放使旋转看起来好像是错误的。尝试在 fig.show()
axes[0].set_aspect("equal")
axes[1].set_aspect("equal")