在索引处每行插入一个以上的值
Insert more than one value per row at index
我正在尝试向量化以下操作:
- 将一个较小的数组放入一个较大的数组中,从而索引随着每一行的另一个数组的函数而变化。
示例数据:
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 一起工作 - 但我想知道是否有更有效的方法来解决这个问题。我似乎无法全神贯注于解决问题所需的索引。
我们可以在这里使用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]])
我正在尝试向量化以下操作:
- 将一个较小的数组放入一个较大的数组中,从而索引随着每一行的另一个数组的函数而变化。
示例数据:
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 一起工作 - 但我想知道是否有更有效的方法来解决这个问题。我似乎无法全神贯注于解决问题所需的索引。
我们可以在这里使用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]])