преобразовать верхнюю / нижнюю треугольную часть симметричной матрицы (двумерный массив) в одномерный массив и вернуть его в двумерный формат
Вэтот вопрос объясняется, как получить доступ к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-массива?