我有一个非常大的 2D numpy 数组 (A) 和一个较小的 2D 数组 (B),它的两个维度都较小。B是正方形。我有一个与 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, 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, 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([[2, 4, 5, 7],
[2, 7, 1, 3],
[6, 1, 3, 5],
[1, 6, 3, 2]])
Index = np.array([0, 1, 5, 6])
我想将B的内容添加到Index定义的行和列中的A中。A不一定全是0,所以需要加法。结果如下:
R = np.array([2, 4, 0, 0, 0, 5, 7, 0, 0],
[2, 7, 0, 0, 0, 1, 3, 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, 0],
[6, 1, 0, 0, 0, 3, 5, 0, 0],
[1, 6, 0, 0, 0, 3, 2, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
我尝试这样做:
A[Index, Index] += B
这给了我以下错误ValueError: shape mismatch: value array of shape (4,4) could not be broadcast to indexing result of shape (4,)
我不明白为什么这不起作用,因为我可以这样做:
A[Index, Index[0]:Index[0]+4] = B
然后值将全部出现在正确的行中,但不会出现在正确的列中。这是有道理的,因为我只是给它一个 4 列的块来让它出现在其中,但我希望它出现在 Index 定义的列中。
我还尝试了 np.add.at(A[Index], Index, B) 这让我觉得IndexError: index 6 is out of bounds for axis 0 with size 4.
我不明白为什么它尝试访问 B 中的索引 6,其大小为 4。