【问题标题】:Insert more than one value per row at index在索引处每行插入多个值
【发布时间】:2020-04-08 14:19:03
【问题描述】:

我正在尝试对以下操作进行矢量化:

  • 将较小的数组放入较大的数组中,这样每行的索引就会随着另一个数组的函数而变化。

示例数据:

array_large = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] 
array_small = [[1,2],[3,4],[5,6]] 

array_index = [[1],[0],[2]] #*random index

所需输出:array_combined = [[0,1,2,0,0],[3,4,0,0,0],[0,0,5,6,0]]

到目前为止,我一直在让它与 apply_along_axis 一起工作——但我想知道是否有更有效的方法来解决这个问题。我似乎无法解决解决问题所需的索引。

【问题讨论】:

    标签: python numpy vectorization


    【解决方案1】:

    我们可以在这里使用advanced indexing

    array_large[np.arange(array_large.shape[0])[:,None], array_index+[0,1]] = array_small
    

    或者更好,概括array_small 可能具有的任何形状:

    i = np.arange(array_large.shape[0])[:,None]
    j = array_index+np.arange(array_small.shape[1])
    array_large[i,j] = array_small
    

    print(array_large)
    
    array([[0, 1, 2, 0, 0],
           [3, 4, 0, 0, 0],
           [0, 0, 5, 6, 0]])
    

    【讨论】:

    • 谢谢@JvdV 只是在制作高级索引方面的经验,我猜? :)
    • 非常感谢。这正是我正在寻找的东西:) 我确信那里有一些解决方案..
    • 我实际上还有一个后续问题,如果可以的话:如果 array_index 中的索引接近大数组的末尾,那么这段代码如何被应用,导致小数组不适合。到目前为止,这会引发一个索引错误......甚至可以使用高级索引来处理这个问题吗?
    • 我认为如果你发布一个带有简单示例的新问题和预期的输出会更好,这样每个人都会更清楚@deineomaklaut
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多