преобразовать верхнюю / нижнюю треугольную часть симметричной матрицы (двумерный массив) в одномерный массив и вернуть его в двумерный формат

Вэтот вопрос объясняется, как получить доступ к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изменяя его значения, он будет использоваться для заполнения симметричного 2D-массива:

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 для перестройки 2D-массива?

Ответы на вопрос(2)

Ваш ответ на вопрос