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

Python numpy如何提取指定非连续行列的子矩阵并保留结构

NumPy 非连续索引子矩阵提取方案

你遇到的问题是NumPy高级索引的默认规则导致的:当直接传入两个等长的一维索引元组/数组做索引时,NumPy会按位置成对匹配坐标取值,也就是取(row[0], col[0])、(row[1], col[1])……对应位置的元素,所以你用A[row, column]只会得到[1,7],而不是行列交叉的二维子矩阵。

以下是两种可直接复用的实现方式:

  • 方法1:使用np.ix_构造广播索引(推荐)
    np.ix_会将输入的行、列索引转换为可广播的维度格式,自动提取所有行列交叉位置的元素,保留原有的矩阵结构,且支持任意顺序、任意非连续的索引值:
import numpy as np

A = np.array([[1,2,3,4],[5,6,7,8]])
row = (0, 1)
column = (0, 2)

result = A[np.ix_(row, column)]
print(result)
# 输出:
# [[1 3]
#  [5 7]]
  • 方法2:分步索引选行再选列
    逻辑更直观的写法,先筛选出所有需要的行,再从筛选结果里提取目标列:
result = A[list(row)][:, list(column)]

说明:分步索引会先生成行筛选的临时副本,处理超大规模矩阵时性能略低于np.ix_方案,日常小数据场景使用没有区别。

切片仅能提取连续范围的元素,以上两种方法对非连续、乱序的行列索引都完全适用,不会丢失矩阵的二维结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:24:14