如何从源数组中分配目标数组的子集?

Equ*_*Dev 2 python numpy

有两个数组,如:

a = np.zeros((3, 4), dtype=int)
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

b = np.ones((2, 3), dtype=int)
[[1 1 1]
 [1 1 1]]
Run Code Online (Sandbox Code Playgroud)

如何从源数组(b)分配到源中存在的目标数组(a)中的条目?

结果数组应该是:

[[1 1 1 0]
 [1 1 1 0]
 [0 0 0 0]]
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 5

你可以简单地获得shapeb,如:

m,n = b.shape
Run Code Online (Sandbox Code Playgroud)

然后使用切片设置元素a:

a[:m,:n] = b
Run Code Online (Sandbox Code Playgroud)

这会产生:

>>> m,n = b.shape
>>> a[:m,:n] = b
>>> a
array([[1, 1, 1, 0],
       [1, 1, 1, 0],
       [0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

如果a并且b具有相同任意数量的维度,我们可以使用以下生成器:

a[tuple(slice(mi) for mi in b.shape)] = b
Run Code Online (Sandbox Code Playgroud)

这又导致:

>>> a[tuple(slice(mi) for mi in b.shape)] = b
>>> a
array([[1, 1, 1, 0],
       [1, 1, 1, 0],
       [0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

但这也适用于3d,4d,......阵列.