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

如何从10x10的Python数组M中提取指定行列的3x3子数组?

解决NumPy数组提取指定行列子数组的问题

当你用M[[2,3,5],[2,3,5]]时,得到的是三个对角线元素,这是因为这种索引方式是按配对索引取元素:依次取(2,2)、(3,3)、(5,5)这三个位置的值,而非所有行与列的组合。要提取3x3的子数组,有以下几种方法:

方法1:使用np.ix_函数

np.ix_会将行、列索引转换为可广播的索引对,生成所有行与列的组合:

import numpy as np
# 示例10x10数组
M = np.random.rand(10, 10)
rows = [2, 3, 5]
cols = [2, 3, 5]
# 提取3x3子数组
sub_array = M[np.ix_(rows, cols)]

方法2:分步索引

先提取目标行,再从这些行中提取目标列:

# 先取指定行得到3x10的数组,再取指定列
sub_array = M[rows][:, cols]
# 等价写法
sub_array = M[rows, :][:, cols]

为什么原写法失效?

M[[r1,r2,r3], [c1,c2,c3]]属于NumPy的整数数组配对索引,会返回(r1,c1)、(r2,c2)、(r3,c3)这几个位置的元素,最终得到一维数组,而非二维子数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:31:10