dop*_*man 5 python numpy linear-algebra
我不确定该主题是否更适合此处或数学上的溢出。由于我使用的是numpy,因此我想将其发布在这里。
我正在尝试在3维空间中旋转多维数据集,然后将其投影到2维平面上。
我从Identiy矩阵开始:
import numpy as np
I = [[1,0,0],
[0,1,0],
[0,0,1]]
Run Code Online (Sandbox Code Playgroud)
然后,我将旋转变换应用于Y轴:
from math import sin, cos
theta = radians(30)
c, s = cos(theta), sin(theta)
RY = np.array([[c, 0, s],[0, 1, 0], [-s, 0, c]])
# at this point I'd be dotting the Identiy matrix, but I'll include for completeness
I_RY = np.dot(I, RY)
Run Code Online (Sandbox Code Playgroud)
在这一点上,我有一个新的基础空间,它已绕Y轴旋转了30度。
现在,我想将此投影到二维空间上。我认为,这个新空间基本上是Z轴设置为零的标识基础:
FLAT = [[1,0,0],
[0,1,0],
[0,0,0]]
Run Code Online (Sandbox Code Playgroud)
所以现在,我认为我可以对此进行组合以完成从立方体到正方形的完整转换:
NEW_SPACE = np.dot(I_RY, FLAT)
Run Code Online (Sandbox Code Playgroud)
剩下的就是变换原始立方体的点。假设原始多维数据集的东北点设置为[1,1,1]和[1,1,-1],我可以这样获得新点:
NE_1 = np.array([1,1,1])
NE_2 = np.array([1,1,-1])
np.dot(NEW_SPACE, NE_1)
np.dot(NEW_SPACE, NE_2)
Run Code Online (Sandbox Code Playgroud)
但是,这给了我以下几点:
array([ 0.8660254, 1. , -0.5 ])
Run Code Online (Sandbox Code Playgroud)
之所以这样签出,是因为两个点都被展平为同一件事。但是,-0.5Z轴上的是多少?它代表什么?
Z轴后变换上存在一个值,使我认为我的方法不正确。请告诉我是否要以错误的方式进行操作。
正如 @PaulPanzer 指出的,我从错误的方向点了新向量。解决办法是
np.dot(NE_1, NEW_SPACE)
Run Code Online (Sandbox Code Playgroud)