You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将NumPy一维数组转换为对角线为0的类邻接矩阵?

解决NumPy一维数组转对角线为0的类邻接矩阵问题

问题分析

你需要将长度为10的一维数组转换为5×5的严格下三角矩阵(对角线为0),元素按列优先填充到i>j的位置。核心是精准定位这些下三角区域的索引,再批量赋值。

实现代码

import numpy as np

# 原始一维数组
arr = np.array([1,2,3,4,5,6,7,8,9,10])

# 计算目标矩阵的维度n(满足n*(n-1)/2 = 数组长度)
n = int((1 + np.sqrt(1 + 8 * len(arr))) // 2)

# 创建全零矩阵
mat = np.zeros((n, n), dtype=int)

# 获取严格下三角区域(i>j)的索引(按列优先顺序)
i_indices, j_indices = np.tril_indices(n, k=-1)

# 为下三角区域赋值
mat[i_indices, j_indices] = arr

print(mat)

输出结果

[[0 0 0 0 0]
 [1 0 0 0 0]
 [2 5 0 0 0]
 [3 6 8 0 0]
 [4 7 9 10 0]]

扩展:生成对称矩阵(包含上下三角)

如果需要生成对称的邻接矩阵,只需在赋值时同时填充上三角区域:

# 填充对称位置
mat[j_indices, i_indices] = arr
print(mat)

输出:

[[0 1 2 3 4]
 [1 0 5 6 7]
 [2 5 0 8 9]
 [3 6 8 0 10]
 [4 7 9 10 0]]

关键说明

  • np.tril_indices(n, k=-1)会返回所有满足i>j的索引对,且顺序正好是列优先(先填第0列的下三角,再第1列,以此类推),完美匹配你的需求。
  • 矩阵维度n通过三角数公式计算:由n*(n-1)/2 = len(arr)推导得出,确保适配任意长度的三角数数组。

内容的提问来源于stack exchange,提问作者lindak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:05:11