Skip to main content
 首页 » 编程设计

python之如何使用 numpy 将一个小矩阵添加到一个大矩阵中

2025年05月04日9xiaohuochai

我想弄清楚如何获取一个小矩阵(下面的矩阵 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 中,因为它是简单的索引,这意味着数据不会被复制,这使得操作对于大型数组相当有效。