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

如何在NumPy中根据指定向量按行选取对应位置元素?

问题描述

假设存在矩阵A:

A = [[34, 61, 29, 74, 17, 32, 72, 92, 93, 57],
     [46, 10, 23, 84, 74, 57, 56, 88, 90, 36],
     [23, 83, 58, 42, 93, 54, 82, 48, 63, 73]]

以及长度为3的向量b:

b = [4, 0, 1]

是否存在NumPy函数可以实现如下功能:

>>> A.choose_row_wise(b)
输出结果:
[17, 46, 83]
解决方案

有,NumPy无需专门的choose_row_wise方法,通过原生索引或内置函数就能实现需求,以下是两种高效实现方式:

  • 基础索引法:这是NumPy中最常用的实现方式,性能最优

    import numpy as np
    
    A = np.array([[34, 61, 29, 74, 17, 32, 72, 92, 93, 57],
                  [46, 10, 23, 84, 74, 57, 56, 88, 90, 36],
                  [23, 83, 58, 42, 93, 54, 82, 48, 63, 73]])
    b = np.array([4, 0, 1])
    
    result = A[np.arange(A.shape[0]), b]
    print(result)  # 输出: [17 46 83]
    

    其中np.arange(A.shape[0])生成与行数匹配的行索引[0,1,2],和b的列索引一一对应,精准定位每行要提取的元素。

  • take_along_axis函数法:语义更清晰,明确指定按行方向选择对应位置的元素

    result = np.take_along_axis(A, b[:, np.newaxis], axis=1).flatten()
    print(result)  # 输出: [17 46 83]
    

    b[:, np.newaxis]将一维的b转为列向量以匹配A的维度,take_along_axis按指定轴(axis=1即列方向)提取对应元素,最后用flatten()转回一维数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:05:19