numpy 将邻域作为新的(第 3 个)维度存储到矩阵中

numpy store the neigborhood as new (3rd) dimension into matrix

给定一个像这样的 numpy 数组:

L = 2
np.random.randint([-1,1],size=(L,L), dtype=int)
array([[1, -1],
       [-1, 1]])

如何(有效地)将其转换为相似形状的数组

np.random.choice([-1, 1], size=(2,2,4))
array([[[-1, -1,  1,  1],
        [-1, -1,  1, -1]],

       [[-1,  1, -1,  1],
        [ 1, -1,  1,  1]]])

但与此处所示不同,第 3 维随机包含其中的 4 个邻居(在角上填充 0)。

[[1, -1], [-1, 1]]

第一个元素的邻域为:

我想将这个邻域向量存储到矩阵的第 3 维中。

这是否可以不手动循环矩阵?

编辑

例如:

[[1, -1], [-1, 1]]

[[[0,0,-1-1], [1,0,0,1]],

...]

您可以尝试以下方法:

#sample array
a = np.arange(9).reshape(3, 3)
print(a)

它给出:

[[0 1 2]
 [3 4 5]
 [6 7 8]]

计算邻居数组:

p = np.pad(a, 1)
out = np.empty((*a.shape, 4), dtype=a.dtype)

out[..., 0] = p[:-2, 1:-1] #up
out[..., 1] = p[2:, 1:-1]  #down
out[..., 2] = p[1:-1, :-2] #left
out[..., 3] = p[1:-1, 2:]  #right

然后,例如 out[2, 1][4, 0, 6, 8]a[2, 1] 的邻居数组 [up, down, left, right] 顺序(填充为 0)。