Vla*_*ecs 7 python matlab numpy matrix
我有一个70x70 numpy ndarray,主要是对角线.唯一的非对角线值是对角线以下.我想使矩阵对称.
作为Matlab世界的新手,我无法让它在没有循环的情况下工作.在MATLAB中很简单:
W = max(A,A')
A'矩阵转置在哪里,max()函数注意使W矩阵是对称的.
在Python中有没有一种优雅的方式呢?
示例样本A矩阵是:
1 0 0 0
0 2 0 0
1 0 2 0
0 1 0 3
所需的输出矩阵W是:
1 0 1 0
0 2 0 1
1 0 2 0
0 1 0 3
Vla*_*ecs 20
找到适合我的以下解决方案:
import numpy as np
W = np.maximum( A, A.transpose() )
使用 NumPytril和triu函数如下。它本质上是将下三角形中的元素“镜像”到上三角形中。
import numpy as np
A = np.array([[1, 0, 0, 0], [0, 2, 0, 0], [1, 0, 2, 0], [0, 1, 0, 3]])
W = np.tril(A) + np.triu(A.T, 1)
tril(m, k=0)获取矩阵的下三角形m(返回矩阵的副本,m其中k第 th 对角线上方的所有元素都归零)。类似地,triu(m, k=0)获取矩阵的上三角形m(k第 th 对角线下方的所有元素都归零)。
为了防止对角线被添加两次,必须使用np.tril(A) + np.triu(A.T, 1)或排除其中一个三角形的对角线np.tril(A, -1) + np.triu(A.T)。
另请注意,这与使用maximum. 上三角中的所有元素都会被覆盖,无论它们是否为最大值。这意味着它们可以是任何值(例如nan或inf)。
| 归档时间: | 
 | 
| 查看次数: | 7397 次 | 
| 最近记录: |