特征向量变换的差异:Mathematica 与 SciPy

2024-02-06

类似的问题之前曾在这里被问过,但似乎没有人回答我的例子。我使用 Mathematica 和 SciPy 计算矩阵 A 的特征值和特征向量;特征值一致,但特征向量则不然:

(1) 最低(特征值)特征向量一致

(2) Mathematica 和 SciPy 的其余相应特征向量不通过乘法因子相关

(3) 我可以使用外积将 SciPy 的特征向量发送到 Mathematica 的相应特征向量来计算变换矩阵 T

T = numpy.outer(MathematicaEigenvector, SciPyEigenvector)

这样

MathematicaEigenvector = numpy.dot(T, SciPyEigenvector)

我希望所有 SciPy-Mathematica 特征向量对的变换矩阵 T 应该相同,因为 T 只是将矩阵 inv(T).A.T 的特征向量与原始矩阵 A 的特征向量相关联的矩阵。然而,对每个特征向量对执行步骤 (2) 会给出不同的 T 矩阵。

有人可以解释一下吗?如果需要,我可以发布矩阵。

UPDATE: python代码和矩阵如下:

S = [[0., -1, -1, -1, 0, 0, -1, 0, 0], 
    [-1, 0., -1, 0, -1, 0, 0, -1, 0], 
    [-1, -1, 0., 0, 0, -1, 0, 0, -1], 
    [-1, 0, 0, 0., -1, -1, -1, 0, 0], 
    [0, -1, 0, -1, 0., -1, 0, -1, 0], 
    [0, 0, -1, -1, -1, 0, 0, 0, -1], 
    [-1, 0, 0, -1, 0, 0, 0., -1, -1], 
    [0, -1, 0, 0, -1, 0, -1, 0., -1], 
    [0, 0, -1, 0, 0, -1, -1, -1, 0.]];

eig_val,eig_vec = scipy.linalg.eig(S)
idx = eig_val.argsort()
eig_val = np.array(eig_val[idx])
eig_vec = np.array(eig_vec[:,idx])

Mathematica 特征向量是:

[-0.333333, -0.333333, -0.333333, -0.333333, -0.333333, -0.333333, -0.333333, -0.333333, -0.333333], 
[0.0385464, 0.570914,   0.371276, -0.570914, -0.0385464, -0.238184, -0.33273, 0.199638,   0.], 
[0.570246, -0.0269007, 0.197029,   0.0269007, -0.570246, -0.346316, 0.373217, -0.22393,   0.], 
[-0.0816497, 0.0816497, -0.489898, -0.0816497,   0.0816497, -0.489898, 0.408248, 0.571548,   0.], 
[-0.333333, -0.333333, 0.166667, -0.333333, -0.333333,   0.166667, 0.166667, 0.166667, 0.666667], 
[-0.288675, 0.288675,   2.498e-16, -0.288675, 0.288675, -1.94289e-16,   0.57735, -0.57735, 0.],
[-0.5, 0.5, -2.04678e-16, 0.5, -0.5,   2.41686e-16, -9.25186e-17, 5.55112e-17, 0.], 
[0.166667,   0.166667, -0.333333, 0.166667,   0.166667, -0.333333, -0.333333, -0.333333, 0.666667], 
[0.288675,   0.288675, -0.57735, -0.288675, -0.288675, 0.57735,   4.02456e-16, -2.08167e-16, 0.]

而 SciPy 特征向量为:

[-0.33333333 -0.33333333 -0.33333333 -0.33333333 -0.33333333 -0.33333333 -0.33333333 -0.33333333 -0.33333333]
[ 0.12054181 -0.17813781  0.50013951  0.08577902 -0.21290061  0.4653767 -0.2872389  -0.58591853  0.0923588 ]
[ 0.12191583 -0.21327897  0.26215377 -0.28683603 -0.62203084 -0.1465981 0.35987707  0.02468226  0.500115  ]
[ 0.66666667  0.16666667  0.16666667  0.16666667 -0.33333333 -0.33333333 0.16666667 -0.33333333 -0.33333333]
[-0.16604424 -0.59504716 -0.43689399  0.43294845  0.00394553  0.16209871 0.43294845  0.00394553  0.16209871]
[-0.01305419  0.07446538 -0.0614112  -0.54881726  0.36347168  0.18534558 0.56187145 -0.43793706 -0.12393438]
[-0.66666667  0.33333333  0.33333333  0.33333333 -0.16666667 -0.16666667 0.33333333 -0.16666667 -0.16666667]
[-0.21052033  0.65306873 -0.4425484   0.10526016 -0.32653437  0.2212742 0.10526016 -0.32653437  0.2212742 ]
[-0.02303417  0.0714558  -0.04842162  0.09679298  0.41311466 -0.50990763 -0.0737588  -0.48457045  0.55832926]
[ 4.67737437  0.12612917  0.75157798 -0.09378424  0.91674876  2.36234989 1.03706802 -9.0725069   0.        ]

以上均按特征值排序 [-4.+0.j、-1.+0.j、-1.+0.j、-1.+0.j、-1.+0.j、2.+0.j、2. +0.j, 2.+0.j, 2.+0.j]


我认为原因如下:因为存在重复的特征值,所以变换矩阵 T 必须作用于该子空间中特征向量的线性组合,而不是单个特征值。也就是说,我的第一个代码片段应该修改为:

T = numpy.outer(MathematicaEigenvectorSubspace, SciPyEigenvectorSubspace)

我还没有通过找到使两个子空间等效的线性组合来检查这是否明确有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特征向量变换的差异:Mathematica 与 SciPy 的相关文章

  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar

随机推荐