numpy 基础的变化
Change of basis in numpy
给定 numpy 中的两个基矩阵 basis_old
和 basis_new
,库中某处是否有一个函数可以获取变换矩阵以将 vec
中的向量转换为 basis_old
] 到它在 basis_new
?
中的表示
例如,如果我在标准基础 [1,0,0], [0,1,0], [0,0,1]
中有一个向量 vec = [1,2,3]
,如何将其转换为另一个基础,例如
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)
编辑:将basis_new更改为线性无关
记住一组向量 w1、w2、w3 作为 R3 的基础意味着什么。
w 必须是 linearly independent。这意味着 x1 w1 + x2 w2 + x3 w3 = 0 的唯一解应该是 x1 = x2 = x3 = 0。但是在你的情况下,你可以验证 x1 = 1, x2 = -2, x3 = 1 是另一个解.所以你的 basis_new
无效。
矩阵W = [w1, w2, w3]一定是可逆的
对于 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)
给定 numpy 中的两个基矩阵 basis_old
和 basis_new
,库中某处是否有一个函数可以获取变换矩阵以将 vec
中的向量转换为 basis_old
] 到它在 basis_new
?
例如,如果我在标准基础 [1,0,0], [0,1,0], [0,0,1]
中有一个向量 vec = [1,2,3]
,如何将其转换为另一个基础,例如
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)
编辑:将basis_new更改为线性无关
记住一组向量 w1、w2、w3 作为 R3 的基础意味着什么。
w 必须是 linearly independent。这意味着 x1 w1 + x2 w2 + x3 w3 = 0 的唯一解应该是 x1 = x2 = x3 = 0。但是在你的情况下,你可以验证 x1 = 1, x2 = -2, x3 = 1 是另一个解.所以你的
basis_new
无效。矩阵W = [w1, w2, w3]一定是可逆的
对于 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)