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

如何使用Numpy从二维矩阵中精准提取指定数值?

从二维Numpy矩阵提取指定子数组的正确方法

首先给出可正常运行的原矩阵定义(补充了元素间的逗号,避免语法错误):

import numpy as np

a = np.array(
[[ 1,  2,  3,  4,  5], 
 [ 6,  7,  8,  9, 10], 
 [11, 12, 13, 14, 15], 
 [16, 17, 18, 19, 20], 
 [21, 22, 23, 24, 25], 
 [26, 27, 28, 29, 30]]
)

需要提取的目标子数组为:

[[11,12],[16,17],[29,30]]

错误原因分析

ChatGPT给出的a[[2, 3, 5], [0, 1, 1]]属于Numpy的配对花式索引,会依次取(2,0)、(3,1)、(5,1)三个位置的元素,最终得到[11 17 27],和需求不符。

正确解决方案

方法一:分块提取+拼接(最直观)

先提取连续的子块,再拼接零散的部分:

# 提取第3、4行(索引2、3)的前两列
part1 = a[2:4, :2]
# 提取第6行(索引5)的最后两列,重塑为二维数组
part2 = a[5, 3:].reshape(1, 2)
# 垂直拼接两个部分
result = np.vstack([part1, part2])
print(result)

输出结果:

[[11 12]
 [16 17]
 [29 30]]

方法二:构造完整索引数组(一次性提取)

通过构造所有目标元素的行和列索引,提取后重塑形状:

# 定义所有目标元素的行索引
rows = [2, 2, 3, 3, 5, 5]
# 定义所有目标元素的列索引
cols = [0, 1, 0, 1, 3, 4]
# 提取元素并重塑为3行2列的数组
result = a[rows, cols].reshape(3, 2)
print(result)

也可以用np.r_简化索引构造:

result = a[np.r_[2,2,3,3,5,5], np.r_[0,1,0,1,3,4]].reshape(3,2)

方法三:列表推导式(适合小矩阵场景)

遍历所有目标位置,逐个提取后组合:

# 定义所有目标元素的坐标
target_positions = [(2,0), (2,1), (3,0), (3,1), (5,3), (5,4)]
# 提取元素并转为指定形状的数组
result = np.array([a[pos] for pos in target_positions]).reshape(3,2)
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:15:23