Приведение нижней треугольной матрицы к симметричной
Есть нижняя треугольная матрица вида:
0.0
0.5 0.0
0.4 0.6 0.0
записана как список списков [[0.0], [0.5, 0.0], [0.4, 0.6, 0.0]]
Как сделать матрицу полной? Привести к виду:
0.0 0.5 0.4
0.5 0.0 0.6
0.4 0.6 0.0
Догадываюсь что есть какой-то метод в numpy, но с этим пакетом я слабо знаком, не могу найти
Ответы (2 шт):
Автор решения: splash58
→ Ссылка
Если она не огромного размера, достаточно так
a
[[0.0], [0.5, 0.0], [0.4, 0.6, 0.0]]
b = [[a[i][j] if j<= i else a[j][i] for j in range(len(a))] for i in range(len(a))]
b
[[0.0, 0.5, 0.4], [0.5, 0.0, 0.6], [0.4, 0.6, 0.0]]
Автор решения: strawdog
→ Ссылка
Можно использовать и numpy, но я не уверен, что там есть векторизированный подход к заполнению матрицы. Поэтому советую использовать pandas:
import pandas as pd
a = [[0.0], [0.5, 0.0], [0.4, 0.6, 0.0]]
df = pd.DataFrame(a)
df=df.combine_first(df.T)
print(df)
Получаем:
0 1 2
0 0.0 0.5 0.4
1 0.5 0.0 0.6
2 0.4 0.6 0.0
Если нужно получить не датафрейм, а список списков, то можно добавтить:
res = df.values.tolist()
print(res)
Что даст:
[[0.0, 0.5, 0.4], [0.5, 0.0, 0.6], [0.4, 0.6, 0.0]]