In
this question
它解释了如何访问一个给定矩阵的
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]
Returning:
array([[ 11., 12., 13.],
[ 12., 22., 23.],
[ 13., 23., 33.]])
是否有更好的方法来完成这个任务?更具体地说,避免用Python循环来重建二维数组?