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

Python中如何根据二进制矩阵W的非零坐标提取矩阵S的对应子矩阵

实现方案

你可以直接使用Numpy的布尔索引特性实现需求,仅需一行代码就能生成所有子矩阵,无需逐列编写循环,也能解决空数组初始化的问题:

import numpy as np

# 输入转换为Numpy数组(如果本身已是数组可跳过此步)
S = np.array([[1,1],[1,2],[1,3],[1,4],[1,5]])
W = np.array([[1,0,0],[1,1,0],[1,1,1],[0,1,1],[0,0,1]])

# 生成所有子矩阵列表,S_list[0]对应S_1,S_list[1]对应S_2,以此类推
S_list = [S[W[:, col].astype(bool)] for col in range(W.shape[1])]

# 可按需单独赋值给对应变量
S_1, S_2, S_3 = S_list

逻辑说明

  • W[:, col].astype(bool)会提取W的第col列,将数值1转为True、0转为False,得到行筛选掩码
  • 直接用掩码索引S的行维度,会自动提取所有掩码为True位置的行,无需手动循环堆叠,即便某列全为0也会返回合法的空二维数组,不会出现初始化错误
  • 你原有写法中用S[0,:]占位初始化的逻辑存在bug:如果第0行不属于当前列的选中范围,最终结果会多出来一行冗余数据,本方案完全规避了该问题

输出验证

运行以下代码可打印结果核对:

for idx, sub_mat in enumerate(S_list, 1):
    print(f"S_{idx} = \n{sub_mat}\n")

输出结果和你预期一致:

S_1 = 
[[1 1]
 [1 2]
 [1 3]]

S_2 = 
[[1 2]
 [1 3]
 [1 4]]

S_3 = 
[[1 3]
 [1 4]
 [1 5]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:54:02