Matrix 在 Python 中给出不同于 Matlab 中的其他规范值

Posted

技术标签:

【中文标题】Matrix 在 Python 中给出不同于 Matlab 中的其他规范值【英文标题】:Matrix gives in Python other norm value than in Matlab 【发布时间】:2020-10-02 20:42:23 【问题描述】:

我的目标是在我的 Python 代码中使用下面在 Matlab 中定义的矩阵,但显然这些对象没有相同的规范?因此,我认为我犯了一个错误。

Tforward = np.array(np.mat('0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274; \
                   0.219417649252501   0.449283757993216   0.449283757993216   0.219417649252501  -0.219417649252501  -0.449283757993216  -0.449283757993216  -0.219417649252501; \
                   0.569359398342846   0.402347308162278  -0.402347308162278  -0.569359398342846  -0.083506045090284   0.083506045090284  -0.083506045090284   0.083506045090284; \
                  -0.083506045090284   0.083506045090284  -0.083506045090284   0.083506045090284   0.569359398342846   0.402347308162278  -0.402347308162278  -0.569359398342846; \
                   0.707106781186547  -0.707106781186547                   0                   0                   0                   0                   0                   0; \
                   0                   0   0.707106781186547  -0.707106781186547                   0                   0                   0                   0; \
                   0                   0                   0                   0   0.707106781186547  -0.707106781186547                   0                   0; \
                   0                   0                   0                   0                   0                   0   0.707106781186547  -0.707106781186547'))

sum(Tforward**2,2)

>>> array([3.00428749, 2.99571251, 2.99571251, 3.00428749, 3.00428749,
       2.99571251, 2.99571251, 3.00428749])
Tforward =  [ 0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274   0.353553390593274;
       0.219417649252501   0.449283757993216   0.449283757993216   0.219417649252501  -0.219417649252501  -0.449283757993216  -0.449283757993216  -0.219417649252501;
       0.569359398342846   0.402347308162278  -0.402347308162278  -0.569359398342846  -0.083506045090284   0.083506045090284  -0.083506045090284   0.083506045090284;
      -0.083506045090284   0.083506045090284  -0.083506045090284   0.083506045090284   0.569359398342846   0.402347308162278  -0.402347308162278  -0.569359398342846;
       0.707106781186547  -0.707106781186547                   0                   0                   0                   0                   0                   0;
                       0                   0   0.707106781186547  -0.707106781186547                   0                   0                   0                   0;
                       0                   0                   0                   0   0.707106781186547  -0.707106781186547                   0                   0;
                       0                   0                   0                   0                   0                   0   0.707106781186547  -0.707106781186547];   

sum(Tforward.^2,2)

>>> ans =

   1.00000
   1.00000
   1.00000
   1.00000
   1.00000
   1.00000
   1.00000
   1.00000

任何帮助表示赞赏

【问题讨论】:

使用np.sum 并正确设置axisparameter 而不是sum @taha 所以,np.sqrt(np.sum(Tfor**2,axis=1))np.linalg(Tforward) 一样吗? 【参考方案1】:

MATLAB Sum 和 Python Sum 的区别不是一回事。如果您有 MATRIX A,则 Matlab 中的 sum(A,2) 会为您提供第二列的总和。但是,在 Python 中, sum(A,2) 会为您提供列表的总和,但也会应用您输入到列表中的数字。

因此,在 MATLAB 中您执行 sum(A(:,2)),而在 Python 中您执行 sum(A+2)。我相信 Taha 在你想要 np.sum 的 cmets 中是正确的

【讨论】:

在我的 matlab 代码中,Tforward(Tforward' * diag(sqrt(1./sum(Tforward.^2,2))))'; 标准化。所以实际上它已经被规范化了。但是在 Python 中我有 np.linalg(Tforward) 等于 2.828? 我今天早上没有时间测试它,但我认为我在原始答案中遗漏了一个额外的问题。你不能在 python 中做 T**2 。我想你想要 np.pow(T,2) np.sum(np.pow(Tfor,2),axis=1)np.sum(Tfor**2,axis=1) 都给我array([1., 1., 1., 1., 1., 1., 1., 1.])。重申一下,我仍然不明白为什么np.linalg(Tforward) 给了我一些不同的东西。

以上是关于Matrix 在 Python 中给出不同于 Matlab 中的其他规范值的主要内容,如果未能解决你的问题,请参考以下文章

Python知识--numpy做矩阵运算

Eigen

MATLAB 到 Python之路1_数据结构和简单操作

在 emmeans 中定义对比

scipy稀疏矩阵和numpy数组之间的点积给出ValueError

Matrix的中文翻译是啥?