更改基数

时间:2019-03-09 23:17:02

标签: python numpy linear-algebra

给定numpy中的两个基本矩阵basis_oldbasis_new,库中某处有一个函数来获取转换矩阵,以将vec中的向量basis_old转换为它在basis_new中的表示形式?

例如,如果我在标准基础vec = [1,2,3]中有一个向量[1,0,0], [0,1,0], [0,0,1],该如何将其转换为另一个基础,例如

e1 = [1 0 0]
e2 = [0 0 1]
e3 = [0 1 0]
basis_new = np.array([e1, e2, e3])

# I want something like this
vec_new = np.linalg.change_of_basis(vec_old, basis_old, basis_new)

# Or this:
transformation_matrix = np.linalg.basis_change(basis_old, basis_new)

编辑:更改了base_new为线性独立

1 个答案:

答案 0 :(得分:2)

记住将向量w1,w2,w3集合作为R3的基是什么。

  1. w必须为linearly independent。这意味着x1 w1 + x2 w2 + x3 w3 = 0的唯一解决方案应该是x1 = x2 = x3 =0。但是在您的情况下,您可以验证x1 = 1,x2 = -2,x3 = 1是另一种解决方案。因此您的basis_new无效。

  2. 矩阵W = [w1,w2,w3]必须是可逆的。

  3. 对于R3中的每个向量,必须有一种唯一方式将其写成w的线性组合。

一旦您满足了这些要求,便可以通过简单的矩阵乘法来计算新坐标。假设要将向量v表示为v = c1 w1 + c2 w2 + c3 w3。要以矩阵形式写,v = W c。要获得c,您要做的就是将两边都乘以W的倒数。

c = W ^ {-1} v

在numpy中,您将其编写为

vec_new = np.linalg.inv(np.array([w1, w2, w3])).dot(vec_old)