如何将一个numpy数组的行稀疏地添加到另一个numpy数组中?

ocebsuys  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个大的2D阵列(A)和一个列数相同但行数较少的较小的2D阵列(B)。我想把我的小数组的行添加到我的大数组的行中,但是我不想影响中间的行。我有一个索引数组,它详细描述了我想要添加的行,像这样:

A = np.array([[0, 0, 0, 0],
              [0, 0, 0, 0],
              [0, 0, 0, 0],
              [0, 0, 0, 0],
              [0, 0, 0, 0],
              [0, 0, 0, 0],
              [0, 0, 0, 0]])
B = np.array([[1, 3, 2, 4],
              [6, 2, 5, 1],
              [2, 8, 1, 4]])
Index = np.array([1, 4, 5])
Result = np.array([[0, 0, 0, 0],
                   [1, 3, 2, 4],
                   [0, 0, 0, 0],
                   [0, 0, 0, 0],
                   [6, 2, 5, 1],
                   [2, 8, 1, 4],
                   [0, 0, 0, 0]])

我的真实的数组没有任何类型的模式,可以切片的行,我的大数组A不一定是一堆零,所以我确实需要添加它们。
我原以为np.apply_沿着_axis会很有用,但使用它有两点我想不通。一个是我的索引没有聚集在一起,我不知道如何告诉apply_沿着_axis“跳过”一个切片。第二,我只是用take_沿着_axis遍历了我的大数组A,所以我不知道如何在我提供的函数中告诉它应该添加数组B的哪一行。我可以这样做,还是有别的办法?

km0tfn4u

km0tfn4u1#

使用np.add.at()

np.add.at(A, Index, B)

或者,您可以这样做:

A[Index] += B

(Note:如果Index包含重复项,则此操作无效。)

相关问题