我想弄清楚如何获取一个小矩阵(下面的矩阵 B)并将值添加到一个更大的矩阵(下面的矩阵 A)中一定的指标。对于这种情况,numpy 似乎是一个不错的选择,但我不知道该怎么做。
矩阵A:
[[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:
[[2, 3, 4]
[5, 6, 7]
[8, 9, 3]]
期望的最终结果:
[[0, 0, 0, 0, 0, 0]
[0, 0, 2, 3, 4, 0]
[0, 0, 5, 6, 7, 0]
[0, 0, 8, 9, 3, 0]
[0, 0, 0, 0, 0, 0]]
请您参考如下方法:
如果你想将 B 添加到 A 并且 B 的左上角指向索引 (r, c) 在 A 中,你可以使用 B 的索引和 shape 属性:
A[r:r+B.shape[0], c:c+B.shape[1]] += B
如果您只想设置元素(覆盖而不是添加),请将 += 替换为 =。在您的特定示例中:
>>> A = np.zeros((5, 6), dtype=int)
>>> B = np.r_[np.arange(2, 10), 3].reshape(3, 3)
>>> r, c = 1, 2
>>> A[r:r+B.shape[0], c:c+B.shape[1]] += B
>>> A
array([[0, 0, 0, 0, 0, 0],
[0, 0, 2, 3, 4, 0],
[0, 0, 5, 6, 7, 0],
[0, 0, 8, 9, 3, 0],
[0, 0, 0, 0, 0, 0]])
索引操作生成 View 到 A 中,因为它是简单的索引,这意味着数据不会被复制,这使得操作对于大型数组相当有效。
