如何获取按列排序的方阵下三角索引(Matplotlib成对图用)
用Numpy快速获取按列排序的严格下三角矩阵索引
刚好我之前也处理过类似的成对图subplot需求,这个场景用Numpy的内置函数就能一步搞定,代码超简洁!
你需要的是**严格下三角区域(行索引i > 列索引j)**且按列排序的索引,Numpy的np.tril_indices()函数正好能满足这个需求:
- 参数
n是你的方阵边长(比如4x4矩阵就传4) - 参数
k=-1表示只取严格下三角(排除对角线元素,这正好匹配你例子里的结果) - 这个函数返回的索引对默认就是按列优先排序的,完全符合你要的顺序
示例代码
import numpy as np # 定义方阵大小 n = 4 # 获取严格下三角的行、列索引(按列排序) rows, cols = np.tril_indices(n, k=-1) # 打包成索引对查看 index_pairs = list(zip(rows, cols)) print("索引对:", index_pairs) # 输出:索引对: [(1, 0), (2, 0), (3, 0), (2, 1), (3, 1), (3, 2)] # 验证你的示例矩阵 matrix = np.array([ [1, 2, 3, 4], [5, 6, 8, 7], [8, 9, 10, 11], [12, 13, 14, 15] ]) # 提取对应元素 target_elements = matrix[rows, cols] print("对应元素:", target_elements) # 输出:对应元素: [ 5 8 12 9 13 14]
补充说明
如果之后需要包含对角线的下三角区域,只需要把k=-1改成k=0即可,但根据你的例子,k=-1是正确的选择。
内容的提问来源于stack exchange,提问作者Fernando Wittmann




