在这个问题中,解释了如何访问给定矩阵的lower
三角形upper
部分,比如:
m = np.matrix([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])
在这里,我需要将矩阵转换为一维数组,可以这样做:
indices = np.triu_indices_from(m)
a = np.asarray( m[indices] )[-1]
#array([11, 12, 13, 22, 23, 33])
在使用 进行大量计算并a
更改其值后,它将用于填充对称二维数组:
new = np.zeros(m.shape)
for i,j in enumerate(zip(*indices)):
new[j]=a[i]
new[j[1],j[0]]=a[i]
返回:
array([[ 11., 12., 13.],
[ 12., 22., 23.],
[ 13., 23., 33.]])
有没有更好的方法来实现这一点?更具体地说,避免 Python 循环重建二维数组?