【发布时间】:2019-04-21 19:20:50
【问题描述】:
我想从对角线下方的元素列表创建一个成熟的矩阵。以下列表包含对角线下方的元素:
这将是所需的输出:
到目前为止,我尝试通过实现以下代码在 python 中使用普通的 sintax 进行这项工作:
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: convert an array to a triangular matrix 的重复,因为我不想创建一个矩阵,其中我的数组值只是下三角矩阵的一部分,而是它们也在上三角矩阵中。
【问题讨论】:
-
@Andrian 看到我的回答,如果有帮助请告诉我
-
@seralouk 感谢您抽出宝贵时间提出解决方案!它按预期工作:)
标签: python python-3.x matrix matrix-transform