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

如何用NumPy切片从随机索引提取邻接矩阵子矩阵?

NumPy切片提取邻接矩阵子矩阵的实现思路

嘿,这个需求用NumPy的整数数组索引就能轻松搞定,完全不需要循环判断,代码简洁又高效!

核心思路

NumPy支持直接用整数数组来选择多维数组中的特定行和列。对于你的场景,只需要用给定的索引列表idx同时指定要提取的行和列,就能一步得到目标子矩阵。

具体实现代码

import numpy as np

# 原邻接矩阵
Y = np.array([[0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.], 
              [0., 0., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 0., 0., 0.], 
              [0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.], 
              [0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 1., 0.], 
              [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0.], 
              [0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
              [0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1.], 
              [0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], 
              [1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 1.], 
              [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.], 
              [0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.], 
              [0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 1.], 
              [0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0.], 
              [0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0.], 
              [0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 1., 0., 0., 0.]])

# 随机索引列表
idx = [0, 3, 7, 10, 14]

# 一步提取子矩阵
Yhat = Y[idx, idx]

# 转换为整数类型(可选,根据需求调整)
Yhat = Yhat.astype(int)

print(Yhat)

输出结果

运行后你会得到和预期完全一致的子矩阵:

[[0 0 0 0 0]
 [0 0 0 1 0]
 [0 0 0 0 0]
 [0 1 0 0 0]
 [0 0 0 0 0]]

为什么这能行?

  • 第一个idx参数指定了要提取的行,第二个idx指定了对应的列。
  • NumPy会自动匹配行和列的索引,生成两个维度索引的交集子矩阵,这比循环判断高效得多,尤其是当矩阵规模较大时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:54:13