擅长:python、mysql、java
<p>注意,矩阵的求逆一点也不简单!首先,所有n点(其中n是空间的维数)必须处于一般位置(即,没有单个点可以表示为其余点的线性组合[注意:这似乎确实是一个简单的要求,但在数值线性代数领域,它是非平凡的;当这种配置真的存在或不存在时,最终的决定将基于“实际领域”的特定知识)。</p>
<p>此外,新点和旧点的“对应关系”可能不准确(然后,您应该使用“真正对应关系”的最佳近似值,即:)。当lib提供伪逆(而不是试图使用纯逆)时,建议使用所有方法。</p>
<p>伪逆的优点是可以使用更多的点进行变换,因此增加了至少n个点处于一般位置的概率。</p>
<p>这里是一个例子,单位平方旋转90度,在二维逆时针方向(但显然这个测定在任何一个维度都有效),用<code>numpy</code>:</p>
<pre><code>In []: P= matrix([[0, 0, 1, 1],
[0, 1, 1, 0]])
In []: Pn= matrix([[0, -1, -1, 0],
[0, 0, 1, 1]])
In []: T= Pn* pinv(P)
In []: (T* P).round()
Out[]:
matrix([[ 0., -1., -1., 0.],
[ 0., 0., 1., 1.]])
</code></pre>
<p>p.S.<code>numpy</code>也很快。在我那台普通的电脑上转换100万点:</p>
<pre><code>In []: P= matrix(rand(2, 1e6))
In []: %timeit T* P
10 loops, best of 3: 37.7 ms per loop
</code></pre>