如何按三角形式提取二维数组的下三角部分(含对角线)
如何将Python二维数组转换为下三角形式(含对角线)
原始输入数组:
a = [[0., 15., 19., 18., 17.], [15., 0., 14., 12., 23.], [19., 14., 0., 14., 21.], [18., 12., 14., 0., 14.], [17., 23., 21., 14., 0.]]
期望输出的下三角形式数组(包含对角线):
[[0.], [15., 0.], [19., 14., 0.], [18., 12., 14., 0.], [17., 23., 21., 14., 0.]]
实现方案
方案1:列表推导式(简洁高效)
利用数组的索引特性,对每一行截取前i+1个元素(i为行的索引,从0开始):
result = [row[:i+1] for i, row in enumerate(a)]
执行后输出结果与目标完全匹配:
print(result) # 输出: # [[0.], [15.0, 0.], [19.0, 14.0, 0.], [18.0, 12.0, 14.0, 0.], [17.0, 23.0, 21.0, 14.0, 0.]]
方案2:手动循环构建(直观易懂)
如果需要更清晰的过程展示,可以通过循环逐行处理:
result = [] for idx in range(len(a)): sub_row = a[idx][:idx+1] result.append(sub_row)
这个方案和列表推导式的效果完全一致,只是写法更偏向过程式。
特殊情况处理(若对角线非0)
如果原始数组的对角线元素不是0,需要强制替换为0的话,可以修改代码如下:
result = [row[:i] + [0.] for i, row in enumerate(a)]
内容的提问来源于stack exchange,提问作者Hi Chem
相关产品推荐
相关产品推荐

