python - 当 A 是矩阵时,eig(A) 和 diag(A) 到底返回什么

标签 python matlab numpy matrix vector

我正在尝试使用 numpy 包将一些 MATLAB 代码转换为 Python,但不确定 eig(A)diag(A) 返回什么,其中 A 是每个我的问题标题的矩阵。

例如,我在 matlab 中有以下代码:

[U,autoval] = eig(S);
[d,i] = sort(-diag(autoval));

% where S is a 2 x 2 matrix, [1.1762 1.2076; 1.2076 1.5364]

在 numpy 中,我可以通过执行以下操作来复制第一行:

autoval, U = np.linalg.eig(S)

我必须修改订单。如果我错了,请纠正我,在 MATLAB 中,第一行 eig(S) 返回的是特征向量,第二行是特征值,这与 python 相反?

但是在 MATLAB 中的第二行中,返回的值如下:

d = [-2.5772 -0.1353];
i = [2 1];

在Python中,运行d后,i = np.msort(- np.diag(autoval)):

d = array([-0.1353, -2.5772]) # why is the order here different
i = array([0.0, 0.0]) # why is this different

提前致谢,干杯!!!

最佳答案

矩阵的特征值没有内在顺序。 MATLAB 中的两个示例代码或Numpy以不确定的未排序顺序返回特征值。仅确定特征值索引与特征向量矩阵中相应列的关系。

np.msort仅返回排序后的数组,而不返回包含排序索引的附加数组,如 MATLAB code做。你碰巧没有注意到这一点,因为np.diag返回一个对角矩阵,排序后可以分为两行 di

如果您想要索引,请使用 np.argsort .

另请注意,在 Numpy 情况下特征值以一维数组形式返回,但在 MATLAB case 中以二维矩阵形式返回。因此,请调用np.diag Numpy 情况下不需要。

关于python - 当 A 是矩阵时,eig(A) 和 diag(A) 到底返回什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633948/

相关文章:

python - python中2个列表的线性回归

python - np.uint16 与 np.uint16 不同

python - 检查 session 变量是否在 Django 中设置

python - 按月份过滤 CSV 并使用该月份的数据创建新的 CSV

python - 如何在 ListView 中提供之前修改 Django 查询集

matlab - 为什么神经网络的准确性不好?

python - 如何使用 OpenCV 将给定坐标转换为 Python 中的 KAZE 关键点

c - C C++ 中的 matlab 和 matlab 中的 C C++

matlab - 根据范围索引从矩阵中提取行?

numpy - 与实空间卷积相比,FFT 卷积的缺点是什么?