ben*_*der 1 python arrays numpy matrix
我试图弄清楚如何采用一个小矩阵(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]]
Run Code Online (Sandbox Code Playgroud)
矩阵B:
[[2, 3, 4]
[5, 6, 7]
[8, 9, 3]]
Run Code Online (Sandbox Code Playgroud)
期望的最终结果:
[[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]]
Run Code Online (Sandbox Code Playgroud)
Mad*_*ist 11
如果你想添加B到A用的上左角B去索引(r, c)中A,你可以使用索引和做shape的属性B:
A[r:r+B.shape[0], c:c+B.shape[1]] += B
Run Code Online (Sandbox Code Playgroud)
如果您只想设置元素(覆盖而不是添加),请替换+=为=.在您的特定示例中:
>>> 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]])
Run Code Online (Sandbox Code Playgroud)
索引操作产生一个视图成A,因为它是简单的索引,这意味着数据没有被复制,这使得操作相当有效的大型阵列.
您可以使用 a 将 b 数组填充为相同的形状。 numpy.pad
import numpy as np
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]])
b = np.array([[2,3,4],
[5,6,7],
[8,9,3]])
b = np.pad(b, ((1,1) , (2,1)), mode = 'constant', constant_values=(0, 0))
print(a+b)
Run Code Online (Sandbox Code Playgroud)
填充后 b 将是
[[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]]
Run Code Online (Sandbox Code Playgroud)
a+b 将是
[[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]]
Run Code Online (Sandbox Code Playgroud)
这((1,1) , (2,1))意味着您在顶部添加 1 行,在底部添加一行,在左侧添加 2 列,在右侧添加 1 列。由于 ,所有添加的行和列都为零mode = 'constant', constant_values=(0, 0)。
所以你可以输入你想要添加矩阵的索引