python - 改变numpy的基础
问题描述
给定两个基矩阵basis_old
,basis_new
在 numpy 中,库中是否有一个函数可以获取转换矩阵以将向量转换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)
编辑:将 basic_new 更改为线性独立
解决方案
记住一组向量 w1、w2、w3 作为 R3 的基意味着什么。
w 必须是线性无关的。这意味着 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)
推荐阅读
- hive - CREATE TABLE 不从磁盘加载数据
- apache-kafka - Kafka Streams 内部主题命名
- azure-devops - powershell VSTS 任务的转义参数
- angular - 在 Angular HTML 模板中初始化 TypeScript 类
- php - 如何要求在 Laravel 验证中检查三个值之一?
- excel - ExportAsFixedFormat 切断第二页
- python - 使用 Python Pandas 从 CSV 文件中删除重复记录
- reactjs - 在管理像应用程序这样的电梯经理时,我是否应该使用多个商店实例?
- r - 在 Rstudio 中添加带有 bookdown::html_document2 的目录
- regex - VSCode 查找所有不包含某个字符的引用