【问题标题】:Change of basis in numpy改变numpy的基础
【发布时间】:2019-03-09 23:17:01
【问题描述】:

给定 numpy 中的两个基矩阵 basis_oldbasis_new,库中是否有一个函数可以获取转换矩阵以将 basis_old 中的向量 vec 转换为 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)

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

【问题讨论】:

  • 不就是一个点积吗?
  • 您的basis_new 不是依据;-)。从标准基础坐标到另一个基础,您可以使用linalg.solve
  • 你的 new basis_new 仍然不是基础。
  • 我的意思是每一行都是一个基向量(我不擅长数学)。我将进行编辑以澄清。
  • 我讨厌迂腐,但对于方阵,行是 l.i.当且仅当列是 l.i.

标签: python numpy linear-algebra


【解决方案1】:

记住将一组向量 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)

【讨论】:

  • 也可以使用np.linalg.solve(W, v) 来避免执行矩阵求逆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2015-04-07
  • 1970-01-01
相关资源
最近更新 更多