【问题标题】:NumPy selecting specific column ranges per row by using a list of indexesNumPy 通过使用索引列表选择每行的特定列范围
【发布时间】:2021-10-06 07:00:00
【问题描述】:

假设我有以下矩阵:

[1, 2, 3, 4]
[4, 5 ,6, 7]
[8, 9, 10,11]

所以在这个例子中,我们想要的列宽是 2。数组大小是 3x4。是否有一种非循环方式来获得每行所需的特定列范围? 示例我想要第 1 行的列 [2,3]、第 2 行的 [1,2] 和第 3 行的 [0,1] 列中的值。

所以想要的输出是:

[3,4]
[5,6]
[8,9]

建议的解决方案可以扩展到任意大的数组和更大的列宽。

此处询问了similar question,但是,此人只是在寻找特定列索引而不是列索引范围。

【问题讨论】:

    标签: python python-3.x numpy indexing


    【解决方案1】:
    In [368]: arr = np.arange(1,13).reshape(3,4)
    In [369]: idx = np.array([[2,3],[1,2],[0,1]])
    In [370]: idx.shape
    Out[370]: (3, 2)
    

    用 (3,1) 索引行,它将用 (3,2) idx 广播给:

    In [371]: arr[np.arange(3)[:,None], idx]
    Out[371]: 
    array([[ 3,  4],
           [ 6,  7],
           [ 9, 10]])
    In [372]: arr
    Out[372]: 
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])
    

    【讨论】:

    • 没有足够的代表点来支持帖子,但解决方案有效!谢谢!
    猜你喜欢
    • 2014-06-19
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多