Я хочу создать полноценную матрицу из списка элементов, находящихся ниже диагонали. Следующий список содержит элементы ниже диагонали:
И это будет желаемый результат:
До этого момента я пытался заставить это работать с обычным синтаксисом в python, реализовав следующий код:
list_similarities = [1,0.1,0.6,0.4,1,0.1,0.2,1,0.7,1]
the_range = range(0,4)
list_of_lists = []
counter_element = 0
counter = -1
for element in the_range:
counter += 1
counter_element += len(the_range)-element
intermediary = (len(the_range)-element)
first_element = counter_element-intermediary
line_list = list_similarities[first_element:counter_element]
# counter = 0, then no need to add an additional element
# print(line_list)
if counter == 0:
"do nothing"
elif counter >0:
for item in range(0,element):
from_list_to_add = list_of_lists[item]
element_to_add = from_list_to_add[item+1]
line_list.insert(0,element_to_add)
print(line_list)
list_of_lists.append(line_list.copy())
# print("final lists:", list_of_lists)
# print(counter_element)
print("final lists:", list_of_lists)
Однако вывод следующий:
финальные списки: [[1, 0.1, 0.6, 0.4], [0.1, 1, 0.1, 0.2], [0.1, 0.1, 1, 0.7], [0.7, 0.1, 0.1, 1]]
Он делает первые 2 списка, которые представляют 2 строки из матрицы, но не будет делать последние 2 из-за того, как работает мой код, и пока я не знаю решения для этого.
Это связано с тем, что мой счетчик заставит список выйти за пределы допустимого диапазона. Я просмотрел много сообщений о переполнении стека, но не могу найти что-то, что сработало бы в моей ситуации. Если вы можете указать мне на аналогичный пример, это было бы прекрасно.
Спасибо за ваше время и предложения!
ОБНОВЛЕНИЕ: Мой вопрос не является дубликатом Numpy: преобразовать массив в треугольную матрицу, потому что я не хочу создавать матрицу, в которой мои значения из массива являются частью только нижней треугольной матрицы, а также находятся в верхней треугольной матрице.