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
并正确设置axis
parameter 而不是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 中的其他规范值的主要内容,如果未能解决你的问题,请参考以下文章